package ari import "encoding/json" func ParseEvent(data []byte) (Event, error) { var base BaseEvent if err := json.Unmarshal(data, &base); err != nil { return nil, err } switch base.Type { case EventStasisStart: var event StasisStartEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil case EventStasisEnd: var event StasisEndEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil case EventChannelStateChange: var event ChannelStateChangeEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil case EventChannelHangupRequest: var event ChannelHangupRequestEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil case EventChannelDestroyed: var event ChannelDestroyedEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil case EventApplicationReplaced: var event ApplicationReplacedEvent if err := json.Unmarshal(data, &event); err != nil { return nil, err } return event, nil default: var raw map[string]any if err := json.Unmarshal(data, &raw); err != nil { return nil, err } return GenericEvent{BaseEvent: base, Raw: raw}, nil } }