package gateway import "encoding/json" // Event type constants. const ( EventMessageCreate = "MESSAGE_CREATE" EventMessageUpdate = "MESSAGE_UPDATE" EventMessageDelete = "MESSAGE_DELETE" EventChannelCreate = "CHANNEL_CREATE" EventChannelUpdate = "CHANNEL_UPDATE" EventChannelDelete = "CHANNEL_DELETE" EventMemberAdd = "SERVER_MEMBER_ADD" EventMemberRemove = "SERVER_MEMBER_REMOVE" EventPresenceUpdate = "PRESENCE_UPDATE" EventTypingStart = "TYPING_START" ) // Event represents a WebSocket event sent to clients. type Event struct { Type string `json:"type"` Data interface{} `json:"data,omitempty"` } // MarshalJSON implements custom JSON marshaling for Event. func (e Event) MarshalJSON() ([]byte, error) { type eventAlias struct { Type string `json:"type"` Data interface{} `json:"data,omitempty"` } return json.Marshal(eventAlias{ Type: e.Type, Data: e.Data, }) } // UnmarshalJSON implements custom JSON unmarshaling for Event. func (e *Event) UnmarshalJSON(data []byte) error { type eventAlias struct { Type string `json:"type"` Data json.RawMessage `json:"data,omitempty"` } var raw eventAlias if err := json.Unmarshal(data, &raw); err != nil { return err } e.Type = raw.Type e.Data = raw.Data return nil }