SYS-REQ-115
(config Config, data []byte, offset int)
| 1466 | |
| 1467 | // SYS-REQ-115 |
| 1468 | func 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 | } |
no test coverage detected