MCPcopy Create free account
hub / github.com/buger/jsonparser / getTypeConfig

Function getTypeConfig

parser.go:1487–1549  ·  view source on GitHub ↗

SYS-REQ-115

(config Config, data []byte, offset int)

Source from the content-addressed store, hash-verified

1485
1486// SYS-REQ-115
1487func getTypeConfig(config Config, data []byte, offset int) ([]byte, ValueType, int, error) {
1488 var dataType ValueType
1489 endOffset := offset
1490
1491 // if string value
1492 if data[offset] == '"' || (config.AllowSingleQuotes && data[offset] == '\'') {
1493 dataType = String
1494 if idx, _ := stringEndConfig(config, data[offset+1:], data[offset]); idx != -1 {
1495 endOffset += idx + 1
1496 } else {
1497 return nil, dataType, offset, MalformedStringError
1498 }
1499 } else if data[offset] == '[' { // if array value
1500 dataType = Array
1501 // break label, for stopping nested loops
1502 endOffset = blockEndConfig(config, data[offset:], '[', ']')
1503
1504 if endOffset == -1 {
1505 return nil, dataType, offset, MalformedArrayError
1506 }
1507
1508 endOffset += offset
1509 } else if data[offset] == '{' { // if object value
1510 dataType = Object
1511 // break label, for stopping nested loops
1512 endOffset = blockEndConfig(config, data[offset:], '{', '}')
1513
1514 if endOffset == -1 {
1515 return nil, dataType, offset, MalformedObjectError
1516 }
1517
1518 endOffset += offset
1519 } else {
1520 // Number, Boolean or None
1521 // tokenEnd returns len(data) when no delimiter is found, never -1,
1522 // so the old end == -1 guard was dead code and has been removed.
1523 end := tokenEnd(data[endOffset:])
1524
1525 value := data[offset : endOffset+end]
1526
1527 switch data[offset] {
1528 case 't', 'f': // true or false
1529 if bytes.Equal(value, trueLiteral) || bytes.Equal(value, falseLiteral) {
1530 dataType = Boolean
1531 } else {
1532 return nil, Unknown, offset, UnknownValueTypeError
1533 }
1534 case 'u', 'n': // undefined or null
1535 if bytes.Equal(value, nullLiteral) {
1536 dataType = Null
1537 } else {
1538 return nil, Unknown, offset, UnknownValueTypeError
1539 }
1540 case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
1541 dataType = Number
1542 default:
1543 return nil, Unknown, offset, UnknownValueTypeError
1544 }

Callers 2

getTypeFunction · 0.85
internalGetConfigFunction · 0.85

Calls 3

stringEndConfigFunction · 0.85
blockEndConfigFunction · 0.85
tokenEndFunction · 0.85

Tested by

no test coverage detected