MCPcopy Create free account
hub / github.com/Monibuca/engine / Unmarshal

Method Unmarshal

util/amf.go:122–190  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

120}
121
122func (amf *AMF) Unmarshal() (obj any, err error) {
123 if !amf.CanRead() {
124 return nil, io.ErrUnexpectedEOF
125 }
126 defer func(b Buffer) {
127 if err != nil {
128 amf.Buffer = b
129 }
130 }(amf.Buffer)
131 switch t := amf.ReadByte(); t {
132 case AMF0_NUMBER:
133 if !amf.CanReadN(8) {
134 return 0, io.ErrUnexpectedEOF
135 }
136 obj = amf.ReadFloat64()
137 case AMF0_BOOLEAN:
138 if !amf.CanRead() {
139 return false, io.ErrUnexpectedEOF
140 }
141 obj = amf.ReadByte() == 1
142 case AMF0_STRING:
143 obj, err = amf.readKey()
144 case AMF0_OBJECT:
145 m := make(map[string]any)
146 for err == nil && obj == nil {
147 obj, err = amf.readProperty(m)
148 }
149 case AMF0_NULL:
150 return nil, nil
151 case AMF0_UNDEFINED:
152 return Undefined, nil
153 case AMF0_ECMA_ARRAY:
154 _ = amf.ReadUint32()
155 for m := make(EcmaArray); err == nil && obj == nil; obj, err = amf.readProperty(m) {
156 }
157 case AMF0_END_OBJECT:
158 return ObjectEnd, nil
159 case AMF0_STRICT_ARRAY:
160 size := amf.ReadUint32()
161 var list []any
162 for i := uint32(0); i < size; i++ {
163 v, err := amf.Unmarshal()
164 if err != nil {
165 return nil, err
166 }
167 list = append(list, v)
168 }
169 obj = list
170 case AMF0_DATE:
171 if !amf.CanReadN(10) {
172 return 0, io.ErrUnexpectedEOF
173 }
174 obj = amf.ReadFloat64()
175 amf.ReadN(2)
176 case AMF0_LONG_STRING,
177 AMF0_XML_DOCUMENT:
178 if !amf.CanReadN(4) {
179 return "", io.ErrUnexpectedEOF

Callers 1

readPropertyMethod · 0.95

Calls 8

readKeyMethod · 0.95
readPropertyMethod · 0.95
CanReadMethod · 0.65
ReadByteMethod · 0.65
CanReadNMethod · 0.65
ReadFloat64Method · 0.65
ReadUint32Method · 0.65
ReadNMethod · 0.65

Tested by

no test coverage detected