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

Function getTypeConfig

parser.go:1527–1589  ·  view source on GitHub ↗

SYS-REQ-115

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

Source from the content-addressed store, hash-verified

1525
1526// SYS-REQ-115
1527func getTypeConfig(config Config, data []byte, offset int) ([]byte, ValueType, int, error) {
1528 var dataType ValueType
1529 endOffset := offset
1530
1531 // if string value
1532 if data[offset] == '"' || (config.AllowSingleQuotes && data[offset] == '\'') {
1533 dataType = String
1534 if idx, _ := stringEndConfig(config, data[offset+1:], data[offset]); idx != -1 {
1535 endOffset += idx + 1
1536 } else {
1537 return nil, dataType, offset, MalformedStringError
1538 }
1539 } else if data[offset] == '[' { // if array value
1540 dataType = Array
1541 // break label, for stopping nested loops
1542 endOffset = blockEndConfig(config, data[offset:], '[', ']')
1543
1544 if endOffset == -1 {
1545 return nil, dataType, offset, MalformedArrayError
1546 }
1547
1548 endOffset += offset
1549 } else if data[offset] == '{' { // if object value
1550 dataType = Object
1551 // break label, for stopping nested loops
1552 endOffset = blockEndConfig(config, data[offset:], '{', '}')
1553
1554 if endOffset == -1 {
1555 return nil, dataType, offset, MalformedObjectError
1556 }
1557
1558 endOffset += offset
1559 } else {
1560 // Number, Boolean or None
1561 // tokenEnd returns len(data) when no delimiter is found, never -1,
1562 // so the old end == -1 guard was dead code and has been removed.
1563 end := tokenEnd(data[endOffset:])
1564
1565 value := data[offset : endOffset+end]
1566
1567 switch data[offset] {
1568 case 't', 'f': // true or false
1569 if bytes.Equal(value, trueLiteral) || bytes.Equal(value, falseLiteral) {
1570 dataType = Boolean
1571 } else {
1572 return nil, Unknown, offset, UnknownValueTypeError
1573 }
1574 case 'u', 'n': // undefined or null
1575 if bytes.Equal(value, nullLiteral) {
1576 dataType = Null
1577 } else {
1578 return nil, Unknown, offset, UnknownValueTypeError
1579 }
1580 case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
1581 dataType = Number
1582 default:
1583 return nil, Unknown, offset, UnknownValueTypeError
1584 }

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