浏览代码

lib/events: Fix unmarshaling of EventType

skip-check: authors

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/4540
Thomas Hipp 8 年之前
父节点
当前提交
b2af8f135b
共有 2 个文件被更改,包括 31 次插入0 次删除
  1. 13 0
      lib/events/events.go
  2. 18 0
      lib/events/events_test.go

+ 13 - 0
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":

+ 18 - 0
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)
+	}
+}