mirror of
https://github.com/json-iterator/go.git
synced 2024-11-30 08:36:43 +02:00
51 lines
800 B
Go
51 lines
800 B
Go
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)
|
|
}
|