55 lines
1.3 KiB
Go
55 lines
1.3 KiB
Go
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
|
|
}
|
|
}
|