@@ -18,21 +18,15 @@ type ProtoCodec interface {
18
18
19
19
// UnmarshalStruct: Unmarshal struct to interface
20
20
UnmarshalStruct (data []byte , mold interface {}) error
21
- // UnmarshalStructNative: Unmarshal struct to interface by native data, No Outside Nodes
22
- UnmarshalStructNative (data []byte , mold interface {}) error
23
21
24
22
// UnmarshalBasic: Unmarshal basic type to interface
25
23
UnmarshalBasic (data []byte , mold * interface {}) error
26
- // UnmarshalBasicNative: Unmarshal basic type to interface by native data, No Outside Nodes
27
- UnmarshalBasicNative (data []byte , mold * interface {}) error
28
24
29
- // IsStruct: mold is Struct?
30
- IsStruct ( mold interface {}) bool
25
+ // UnmarshalStruct: Unmarshal []byte to interface
26
+ Unmarshal ( data [] byte , moldInfo * MoldInfo ) error
31
27
32
- // @deprecated
33
- UnmarshalStructByNodePacket (node * y3.NodePacket , mold interface {}) error
34
- // @deprecated
35
- UnmarshalBasicByNodePacket (node * y3.NodePacket , mold * interface {}) error
28
+ // UnmarshalByNodePacket: Unmarshal NodePacket to interface
29
+ UnmarshalByNodePacket (node * y3.NodePacket , moldInfo * MoldInfo ) error
36
30
}
37
31
38
32
// protoCodec: Implementation of the ProtoCodec Interface
@@ -50,16 +44,21 @@ func NewProtoCodec(observe byte) ProtoCodec {
50
44
}
51
45
}
52
46
47
+ // hold the model data
48
+ type MoldInfo struct {
49
+ Mold interface {}
50
+ }
51
+
53
52
func (c * protoCodec ) Marshal (input interface {}) ([]byte , error ) {
54
- if c .IsStruct (input ) {
53
+ if c .isStruct (input ) {
55
54
return packetstructure .EncodeToBytesWith (c .Observe , input )
56
55
}
57
56
//return marshalBasicNative(c.Observe, input)
58
57
return encodeBasic (c .Observe , input )
59
58
}
60
59
61
60
func (c * protoCodec ) MarshalNative (input interface {}) ([]byte , error ) {
62
- if c .IsStruct (input ) {
61
+ if c .isStruct (input ) {
63
62
np , err := packetstructure .Encode (input )
64
63
if err != nil {
65
64
return nil , err
@@ -73,19 +72,19 @@ func (c *protoCodec) UnmarshalStruct(data []byte, mold interface{}) error {
73
72
return c .structDecoder .Unmarshal (data , mold )
74
73
}
75
74
76
- func (c * protoCodec ) UnmarshalStructNative (data []byte , mold interface {}) error {
75
+ func (c * protoCodec ) unmarshalStructNative (data []byte , mold interface {}) error {
77
76
return c .structDecoder .UnmarshalNative (data , mold )
78
77
}
79
78
80
79
func (c * protoCodec ) UnmarshalBasic (data []byte , mold * interface {}) error {
81
80
return c .basicDecoder .Unmarshal (data , mold )
82
81
}
83
82
84
- func (c * protoCodec ) UnmarshalBasicNative (data []byte , mold * interface {}) error {
83
+ func (c * protoCodec ) unmarshalBasicNative (data []byte , mold * interface {}) error {
85
84
return c .basicDecoder .UnmarshalNative (data , mold )
86
85
}
87
86
88
- func (c * protoCodec ) IsStruct (mold interface {}) bool {
87
+ func (c * protoCodec ) isStruct (mold interface {}) bool {
89
88
isStruct := false
90
89
91
90
moldValue := reflect .Indirect (reflect .ValueOf (mold ))
@@ -102,12 +101,41 @@ func (c *protoCodec) IsStruct(mold interface{}) bool {
102
101
return isStruct
103
102
}
104
103
105
- // @deprecated
106
- func (c * protoCodec ) UnmarshalStructByNodePacket (node * y3.NodePacket , mold interface {}) error {
104
+ func (c * protoCodec ) Unmarshal (data []byte , moldInfo * MoldInfo ) error {
105
+ if c .isStruct (moldInfo .Mold ) {
106
+ err := c .unmarshalStructNative (data , moldInfo .Mold )
107
+ if err != nil {
108
+ return err
109
+ }
110
+
111
+ } else {
112
+ err := c .unmarshalBasicNative (data , & moldInfo .Mold )
113
+ if err != nil {
114
+ return err
115
+ }
116
+ }
117
+ return nil
118
+ }
119
+
120
+ func (c * protoCodec ) unmarshalStructByNodePacket (node * y3.NodePacket , mold interface {}) error {
107
121
return c .structDecoder .UnmarshalByNodePacket (node , mold )
108
122
}
109
123
110
- // @deprecated
111
- func (c * protoCodec ) UnmarshalBasicByNodePacket (node * y3.NodePacket , mold * interface {}) error {
124
+ func (c * protoCodec ) unmarshalBasicByNodePacket (node * y3.NodePacket , mold * interface {}) error {
112
125
return c .basicDecoder .UnmarshalByNodePacket (node , mold )
113
126
}
127
+
128
+ func (c * protoCodec ) UnmarshalByNodePacket (node * y3.NodePacket , moldInfo * MoldInfo ) error {
129
+ if c .isStruct (moldInfo .Mold ) {
130
+ err := c .unmarshalStructByNodePacket (node , moldInfo .Mold )
131
+ if err != nil {
132
+ return err
133
+ }
134
+ } else {
135
+ err := c .unmarshalBasicByNodePacket (node , & moldInfo .Mold )
136
+ if err != nil {
137
+ return err
138
+ }
139
+ }
140
+ return nil
141
+ }
0 commit comments