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

Function getTypeConfig

parser.go:1581–1643  ·  view source on GitHub ↗

SYS-REQ-115

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

Source from the content-addressed store, hash-verified

1579
1580// SYS-REQ-115
1581func getTypeConfig(config Config, data []byte, offset int) ([]byte, ValueType, int, error) {
1582 var dataType ValueType
1583 endOffset := offset
1584
1585 // if string value
1586 if data[offset] == '"' || (config.AllowSingleQuotes && data[offset] == '\'') {
1587 dataType = String
1588 if idx, _ := stringEndConfig(config, data[offset+1:], data[offset]); idx != -1 {
1589 endOffset += idx + 1
1590 } else {
1591 return nil, dataType, offset, MalformedStringError
1592 }
1593 } else if data[offset] == '[' { // if array value
1594 dataType = Array
1595 // break label, for stopping nested loops
1596 endOffset = blockEndConfig(config, data[offset:], '[', ']')
1597
1598 if endOffset == -1 {
1599 return nil, dataType, offset, MalformedArrayError
1600 }
1601
1602 endOffset += offset
1603 } else if data[offset] == '{' { // if object value
1604 dataType = Object
1605 // break label, for stopping nested loops
1606 endOffset = blockEndConfig(config, data[offset:], '{', '}')
1607
1608 if endOffset == -1 {
1609 return nil, dataType, offset, MalformedObjectError
1610 }
1611
1612 endOffset += offset
1613 } else {
1614 // Number, Boolean or None
1615 // tokenEnd returns len(data) when no delimiter is found, never -1,
1616 // so the old end == -1 guard was dead code and has been removed.
1617 end := tokenEnd(data[endOffset:])
1618
1619 value := data[offset : endOffset+end]
1620
1621 switch data[offset] {
1622 case 't', 'f': // true or false
1623 if bytes.Equal(value, trueLiteral) || bytes.Equal(value, falseLiteral) {
1624 dataType = Boolean
1625 } else {
1626 return nil, Unknown, offset, UnknownValueTypeError
1627 }
1628 case 'u', 'n': // undefined or null
1629 if bytes.Equal(value, nullLiteral) {
1630 dataType = Null
1631 } else {
1632 return nil, Unknown, offset, UnknownValueTypeError
1633 }
1634 case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-':
1635 dataType = Number
1636 default:
1637 return nil, Unknown, offset, UnknownValueTypeError
1638 }

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