| 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.NoError(err) |
| should.Equal(`{"Payload":"foo-1"}`, string(jb)) |
| |
| var w2 Wrapper2 |
| err = Unmarshal(jb, &w2) |
| should.NoError(err) |
| should.Equal(MyEnumB, w2.Payload) |
| } |