|
|
@@ -0,0 +1,50 @@
|
|
|
+package jsoniter
|
|
|
+
|
|
|
+import (
|
|
|
+ "fmt"
|
|
|
+ "testing"
|
|
|
+
|
|
|
+ "github.com/stretchr/testify/require"
|
|
|
+)
|
|
|
+
|
|
|
+type MyEnum int64
|
|
|
+
|
|
|
+const (
|
|
|
+ MyEnumA MyEnum = iota
|
|
|
+ MyEnumB
|
|
|
+)
|
|
|
+
|
|
|
+func (m *MyEnum) MarshalJSON() ([]byte, error) {
|
|
|
+ return []byte(fmt.Sprintf(`"foo-%d"`, int(*m))), nil
|
|
|
+}
|
|
|
+
|
|
|
+func (m *MyEnum) UnmarshalJSON(jb []byte) error {
|
|
|
+ switch string(jb) {
|
|
|
+ case `"foo-1"`:
|
|
|
+ *m = MyEnumB
|
|
|
+ default:
|
|
|
+ *m = MyEnumA
|
|
|
+ }
|
|
|
+ return nil
|
|
|
+}
|
|
|
+
|
|
|
+func Test_custom_marshaler_on_enum(t *testing.T) {
|
|
|
+ type Wrapper struct {
|
|
|
+ Payload interface{}
|
|
|
+ }
|
|
|
+ type Wrapper2 struct {
|
|
|
+ Payload MyEnum
|
|
|
+ }
|
|
|
+ should := require.New(t)
|
|
|
+
|
|
|
+ w := Wrapper{Payload: MyEnumB}
|
|
|
+
|
|
|
+ jb, err := Marshal(w)
|
|
|
+ should.Equal(nil, err)
|
|
|
+ should.Equal(`{"Payload":"foo-1"}`, string(jb))
|
|
|
+
|
|
|
+ var w2 Wrapper2
|
|
|
+ err = Unmarshal(jb, &w2)
|
|
|
+ should.Equal(nil, err)
|
|
|
+ should.Equal(MyEnumB, w2.Payload)
|
|
|
+}
|