MCPcopy Index your code
hub / github.com/segmentio/encoding / decodeInterface

Method decodeInterface

json/decode.go:1267–1334  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer)

Source from the content-addressed store, hash-verified

1265}
1266
1267func (d decoder) decodeInterface(b []byte, p unsafe.Pointer) ([]byte, error) {
1268 val := *(*any)(p)
1269 *(*any)(p) = nil
1270
1271 if t := reflect.TypeOf(val); t != nil && t.Kind() == reflect.Ptr {
1272 if v := reflect.ValueOf(val); v.IsNil() || t.Elem().Kind() != reflect.Ptr {
1273 // If the destination is nil the only value that is OK to decode is
1274 // `null`, and the encoding/json package always nils the destination
1275 // interface value in this case.
1276 if hasNullPrefix(b) {
1277 *(*any)(p) = nil
1278 return b[4:], nil
1279 }
1280 }
1281
1282 b, err := Parse(b, val, d.flags)
1283 if err == nil {
1284 *(*any)(p) = val
1285 }
1286
1287 return b, err
1288 }
1289
1290 v, b, k, err := d.parseValue(b)
1291 if err != nil {
1292 return b, err
1293 }
1294
1295 switch k.Class() {
1296 case Object:
1297 m := make(map[string]interface{})
1298 v, err = d.decodeMapStringInterface(v, unsafe.Pointer(&m))
1299 val = m
1300
1301 case Array:
1302 a := make([]interface{}, 0, 10)
1303 v, err = d.decodeSlice(v, unsafe.Pointer(&a), unsafe.Sizeof(a[0]), sliceInterfaceType, decoder.decodeInterface)
1304 val = a
1305
1306 case String:
1307 s := ""
1308 v, err = d.decodeString(v, unsafe.Pointer(&s))
1309 val = s
1310
1311 case Null:
1312 v, val = nil, nil
1313
1314 case Bool:
1315 v, val = nil, k == True
1316
1317 case Num:
1318 v, err = d.decodeDynamicNumber(v, unsafe.Pointer(&val))
1319
1320 default:
1321 return b, syntaxError(v, "expected token but found '%c'", v[0])
1322 }
1323
1324 if err != nil {

Callers 1

Calls 12

parseValueMethod · 0.95
decodeSliceMethod · 0.95
decodeStringMethod · 0.95
decodeDynamicNumberMethod · 0.95
hasNullPrefixFunction · 0.85
syntaxErrorFunction · 0.85
skipSpacesFunction · 0.85
ClassMethod · 0.80
ParseFunction · 0.70
KindMethod · 0.65
ElemMethod · 0.65

Tested by

no test coverage detected