@@ -29,7 +29,70 @@ type Interface interface {
2929 Indent (dst * bytes.Buffer , src []byte , prefix , indent string ) error
3030}
3131
32- var DefaultJSONHandler = getDefaultJSONHandler ()
32+ var (
33+ DefaultJSONHandler = getDefaultJSONHandler ()
34+
35+ _ Interface = StdJSON {}
36+ _ Interface = JSONiter {}
37+ )
38+
39+ // StdJSON implements Interface via encoding/json
40+ type StdJSON struct {}
41+
42+ // Marshal implements Interface
43+ func (StdJSON ) Marshal (v any ) ([]byte , error ) {
44+ return json .Marshal (v )
45+ }
46+
47+ // Unmarshal implements Interface
48+ func (StdJSON ) Unmarshal (data []byte , v any ) error {
49+ return json .Unmarshal (data , v )
50+ }
51+
52+ // NewEncoder implements Interface
53+ func (StdJSON ) NewEncoder (writer io.Writer ) Encoder {
54+ return json .NewEncoder (writer )
55+ }
56+
57+ // NewDecoder implements Interface
58+ func (StdJSON ) NewDecoder (reader io.Reader ) Decoder {
59+ return json .NewDecoder (reader )
60+ }
61+
62+ // Indent implements Interface
63+ func (StdJSON ) Indent (dst * bytes.Buffer , src []byte , prefix , indent string ) error {
64+ return json .Indent (dst , src , prefix , indent )
65+ }
66+
67+ // JSONiter implements Interface via jsoniter
68+ type JSONiter struct {
69+ jsoniter.API
70+ }
71+
72+ // Marshal implements Interface
73+ func (j JSONiter ) Marshal (v any ) ([]byte , error ) {
74+ return j .API .Marshal (v )
75+ }
76+
77+ // Unmarshal implements Interface
78+ func (j JSONiter ) Unmarshal (data []byte , v any ) error {
79+ return j .API .Unmarshal (data , v )
80+ }
81+
82+ // NewEncoder implements Interface
83+ func (j JSONiter ) NewEncoder (writer io.Writer ) Encoder {
84+ return j .API .NewEncoder (writer )
85+ }
86+
87+ // NewDecoder implements Interface
88+ func (j JSONiter ) NewDecoder (reader io.Reader ) Decoder {
89+ return j .API .NewDecoder (reader )
90+ }
91+
92+ // Indent implements Interface, since jsoniter don't support Indent, just use encoding/json's
93+ func (j JSONiter ) Indent (dst * bytes.Buffer , src []byte , prefix , indent string ) error {
94+ return json .Indent (dst , src , prefix , indent )
95+ }
3396
3497// Marshal converts object as bytes
3598func Marshal (v any ) ([]byte , error ) {
0 commit comments