github.com/CyCoreSystems/ari@v4.8.4+incompatible/internal/eventgen/template.tmpl (about) 1 // file generated by eventgen 2 3 package ari 4 5 import ( 6 "encoding/json" 7 "github.com/pkg/errors" 8 ) 9 10 // EventTypes enumerates the list of event types 11 type EventTypes struct { 12 All string 13 {{range .}}{{.Name}} string 14 {{end}} 15 } 16 17 // Events is the instance for grabbing event types 18 var Events EventTypes 19 20 func init() { 21 Events.All = "all" 22 {{range .}} Events.{{.Name}} = "{{.Event}}" 23 {{end}} 24 } 25 26 // DecodeEvent converts a JSON-encoded event to an ARI event. 27 func DecodeEvent(data []byte) (Event,error) { 28 // Decode the event type 29 var typer Message 30 err := json.Unmarshal(data, &typer) 31 if err != nil { 32 return nil, errors.Wrap(err, "failed to decode type") 33 } 34 if typer.Type == "" { 35 return nil, errors.New("no type found") 36 } 37 38 switch typer.Type { 39 {{range .}}case Events.{{.Name}}: 40 var e {{.Name}} 41 err = json.Unmarshal(data, &e) 42 return &e, err 43 {{end}} 44 } 45 return nil, errors.New("unhandled type: "+typer.Type) 46 } 47 48 {{range .}} 49 // {{.Name}} - "{{.Description}}" 50 type {{.Name}} struct { 51 EventData `json:",inline"` 52 53 // Header describes any transport-related metadata 54 Header Header `json:"-"` 55 56 {{range .Properties}}{{.Name}} {{.Type}} {{.Mapping}} {{.Description}} 57 {{end}} } 58 {{end}} 59