Skip to content

Commit 9955b67

Browse files
author
Tao Wen
committed
support marshal
1 parent d69dfd5 commit 9955b67

29 files changed

+1180
-593
lines changed

adapter.go

+29-2
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,13 @@ import (
88
type TypeAdapter interface {
99
Type() interface{}
1010
Unmarshal(iter *Iterator, out interface{})
11+
Marshal(stream *Stream, val interface{})
1112
}
1213

1314
type JsonAdapter struct {
14-
Unmarshal func(bytes []byte, out interface{}) error
15+
Unmarshal func(bytes []byte, out interface{}) error
16+
Marshal func(val interface{}) ([]byte, error)
17+
MarshalIndent func(val interface{}, prefix, indent string) ([]byte, error)
1518
}
1619

1720
func CreateJsonAdapter(adapters ...TypeAdapter) JsonAdapter {
@@ -23,7 +26,7 @@ func CreateJsonAdapter(adapters ...TypeAdapter) JsonAdapter {
2326
return JsonAdapter{
2427
Unmarshal: func(bytes []byte, out interface{}) error {
2528
t := reflect.ValueOf(out).Type()
26-
adapter := adapterMap[t]
29+
adapter := adapterMap[t.Elem()]
2730
if adapter == nil {
2831
if t.Kind() != reflect.Ptr {
2932
return fmt.Errorf("unmarshal expect pointer, actual type is: %s", t)
@@ -34,5 +37,29 @@ func CreateJsonAdapter(adapters ...TypeAdapter) JsonAdapter {
3437
adapter.Unmarshal(iter, out)
3538
return iter.Error
3639
},
40+
Marshal: func(val interface{}) ([]byte, error) {
41+
t := reflect.ValueOf(val).Type()
42+
adapter := adapterMap[t]
43+
if adapter == nil {
44+
fmt.Println("!!!", adapterMap)
45+
fmt.Println("!!!", t)
46+
return nil, fmt.Errorf("unknown type: %s", t)
47+
}
48+
stream := NewStream()
49+
adapter.Marshal(stream, val)
50+
return stream.Buffer(), stream.Error
51+
},
52+
MarshalIndent: func(val interface{}, prefix, indent string) ([]byte, error) {
53+
t := reflect.ValueOf(val).Type()
54+
adapter := adapterMap[t]
55+
if adapter == nil {
56+
return nil, fmt.Errorf("unknown type: %s", t)
57+
}
58+
stream := NewStream()
59+
stream.Prefix = prefix
60+
stream.Indent = indent
61+
adapter.Marshal(stream, val)
62+
return stream.Buffer(), stream.Error
63+
},
3764
}
3865
}

0 commit comments

Comments
 (0)