diff --git a/lib/events/events.go b/lib/events/events.go index 6d4033e8..8b3e8df8 100644 --- a/lib/events/events.go +++ b/lib/events/events.go @@ -8,6 +8,7 @@ package events import ( + "encoding/json" "errors" "runtime" "time" @@ -118,6 +119,18 @@ func (t EventType) MarshalText() ([]byte, error) { return []byte(t.String()), nil } +func (t *EventType) UnmarshalJSON(b []byte) error { + var s string + + if err := json.Unmarshal(b, &s); err != nil { + return err + } + + *t = UnmarshalEventType(s) + + return nil +} + func UnmarshalEventType(s string) EventType { switch s { case "Starting": diff --git a/lib/events/events_test.go b/lib/events/events_test.go index d8b0086d..a310c03f 100644 --- a/lib/events/events_test.go +++ b/lib/events/events_test.go @@ -7,6 +7,7 @@ package events import ( + "encoding/json" "fmt" "testing" "time" @@ -321,3 +322,20 @@ func TestSinceUsesSubscriptionId(t *testing.T) { t.Fatal("Incorrect number of events:", len(events)) } } + +func TestUnmarshalEvent(t *testing.T) { + var event Event + + s := ` + { + "id": 1, + "globalID": 1, + "time": "2006-01-02T15:04:05.999999999Z", + "type": "Starting", + "data": {} + }` + + if err := json.Unmarshal([]byte(s), &event); err != nil { + t.Fatal("Failed to unmarshal event:", err) + } +}