MCPcopy Create free account
hub / github.com/francoispqt/gojay / decodeObjectNull

Method decodeObjectNull

decode_object.go:103–200  ·  view source on GitHub ↗
(v interface{})

Source from the content-addressed store, hash-verified

101}
102
103func (dec *Decoder) decodeObjectNull(v interface{}) (int, error) {
104 // make sure the value is a pointer
105 vv := reflect.ValueOf(v)
106 vvt := vv.Type()
107 if vvt.Kind() != reflect.Ptr || vvt.Elem().Kind() != reflect.Ptr {
108 dec.err = ErrUnmarshalPtrExpected
109 return 0, dec.err
110 }
111 for ; dec.cursor < dec.length || dec.read(); dec.cursor++ {
112 switch dec.data[dec.cursor] {
113 case ' ', '\n', '\t', '\r', ',':
114 case '{':
115 elt := vv.Elem()
116 n := reflect.New(elt.Type().Elem())
117 elt.Set(n)
118 var j UnmarshalerJSONObject
119 var ok bool
120 if j, ok = n.Interface().(UnmarshalerJSONObject); !ok {
121 dec.err = dec.makeInvalidUnmarshalErr((UnmarshalerJSONObject)(nil))
122 return 0, dec.err
123 }
124 keys := j.NKeys()
125 dec.cursor = dec.cursor + 1
126 // if keys is zero we will parse all keys
127 // we run two loops for micro optimization
128 if keys == 0 {
129 for dec.cursor < dec.length || dec.read() {
130 k, done, err := dec.nextKey()
131 if err != nil {
132 return 0, err
133 } else if done {
134 return dec.cursor, nil
135 }
136 err = j.UnmarshalJSONObject(dec, k)
137 if err != nil {
138 dec.err = err
139 return 0, err
140 } else if dec.called&1 == 0 {
141 err := dec.skipData()
142 if err != nil {
143 return 0, err
144 }
145 } else {
146 dec.keysDone++
147 }
148 dec.called &= 0
149 }
150 } else {
151 for (dec.cursor < dec.length || dec.read()) && dec.keysDone < keys {
152 k, done, err := dec.nextKey()
153 if err != nil {
154 return 0, err
155 } else if done {
156 return dec.cursor, nil
157 }
158 err = j.UnmarshalJSONObject(dec, k)
159 if err != nil {
160 dec.err = err

Callers 2

ObjectNullMethod · 0.95
TestDecodeObjectNullFunction · 0.80

Calls 11

readMethod · 0.95
NKeysMethod · 0.95
nextKeyMethod · 0.95
UnmarshalJSONObjectMethod · 0.95
skipDataMethod · 0.95
skipObjectMethod · 0.95
assertNullMethod · 0.95
raiseInvalidJSONErrMethod · 0.95
TypeMethod · 0.80
InterfaceMethod · 0.80

Tested by 1

TestDecodeObjectNullFunction · 0.64