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

Function getTypeConfig

parser.go:1468–1530  ·  view source on GitHub ↗

SYS-REQ-115

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

Source from the content-addressed store, hash-verified

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

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