(b []byte, p unsafe.Pointer, t reflect.Type, pointer bool)
| 1456 | } |
| 1457 | |
| 1458 | func (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 | |
| 1508 | func (d decoder) prependField(key, field string) string { |
| 1509 | if field != "" { |
no test coverage detected