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

Method decodeTextUnmarshaler

json/decode.go:1458–1506  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool)

Source from the content-addressed store, hash-verified

1456}
1457
1458func (d decoder) decodeTextUnmarshaler(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool) ([]byte, error) {
1459 var value string
1460
1461 v, b, k, err := d.parseValue(b)
1462 if err != nil {
1463 return b, err
1464 }
1465 if len(v) == 0 {
1466 return d.inputError(v, t)
1467 }
1468
1469 switch k.Class() {
1470 case Null:
1471 return b, err
1472
1473 case String:
1474 s, _, _, err := d.parseStringUnquote(v, nil)
1475 if err != nil {
1476 return b, err
1477 }
1478 u := reflect.NewAt(t, p)
1479 if !pointer {
1480 u = u.Elem()
1481 t = t.Elem()
1482 }
1483 if u.IsNil() {
1484 u.Set(reflect.New(t))
1485 }
1486 return b, u.Interface().(encoding.TextUnmarshaler).UnmarshalText(s)
1487
1488 case Bool:
1489 if k == True {
1490 value = "true"
1491 } else {
1492 value = "false"
1493 }
1494
1495 case Num:
1496 value = "number"
1497
1498 case Object:
1499 value = "object"
1500
1501 case Array:
1502 value = "array"
1503 }
1504
1505 return b, &UnmarshalTypeError{Value: value, Type: reflect.PointerTo(t)}
1506}
1507
1508func (d decoder) prependField(key, field string) string {
1509 if field != "" {

Callers 1

Calls 6

parseValueMethod · 0.95
inputErrorMethod · 0.95
parseStringUnquoteMethod · 0.95
ClassMethod · 0.80
ElemMethod · 0.65
UnmarshalTextMethod · 0.45

Tested by

no test coverage detected