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

Method Unmarshal

util/amf3.go:57–108  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

55 return ret, nil
56}
57func (amf *AMF3) Unmarshal() (obj any, err error) {
58 defer func() {
59 if e := recover(); e != nil {
60 err = errors.New("amf3 unmarshal error")
61 }
62 }()
63 switch amf.ReadByte() {
64 case AMF3_NULL:
65 return nil, nil
66 case AMF3_FALSE:
67 return false, nil
68 case AMF3_TRUE:
69 return true, nil
70 case AMF3_INTEGER:
71 return amf.readU29()
72 case AMF3_DOUBLE:
73 return amf.ReadFloat64(), nil
74 case AMF3_STRING:
75 return amf.readString()
76 case AMF3_OBJECT:
77 index, err := amf.readU29()
78 if err != nil {
79 return nil, err
80 }
81 if (index & 0x01) == 0 {
82 return amf.ocDec[int(index>>1)], nil
83 }
84 if index != 0x0b {
85 return nil, errors.New("invalid object type")
86 }
87 if amf.ReadByte() != 0x01 {
88 return nil, errors.New("type object not allowed")
89 }
90 ret := make(map[string]any)
91 amf.ocDec = append(amf.ocDec, ret)
92 for {
93 key, err := amf.readString()
94 if err != nil {
95 return nil, err
96 }
97 if key == "" {
98 break
99 }
100 ret[key], err = amf.Unmarshal()
101 if err != nil {
102 return nil, err
103 }
104 }
105 return ret, nil
106 }
107 return nil, errors.New("amf3 unmarshal error")
108}
109
110func (amf *AMF3) writeString(s string) error {
111 index, ok := amf.scEnc[s]

Callers

nothing calls this directly

Calls 5

readU29Method · 0.95
readStringMethod · 0.95
NewMethod · 0.80
ReadByteMethod · 0.65
ReadFloat64Method · 0.65

Tested by

no test coverage detected