SYS-REQ-001, SYS-REQ-027
(data []byte, offset int)
| 913 | |
| 914 | // SYS-REQ-001, SYS-REQ-027 |
| 915 | func getType(data []byte, offset int) ([]byte, ValueType, int, error) { |
| 916 | var dataType ValueType |
| 917 | endOffset := offset |
| 918 | |
| 919 | // if string value |
| 920 | if data[offset] == '"' { |
| 921 | dataType = String |
| 922 | if idx, _ := stringEnd(data[offset+1:]); idx != -1 { |
| 923 | endOffset += idx + 1 |
| 924 | } else { |
| 925 | return nil, dataType, offset, MalformedStringError |
| 926 | } |
| 927 | } else if data[offset] == '[' { // if array value |
| 928 | dataType = Array |
| 929 | // break label, for stopping nested loops |
| 930 | endOffset = blockEnd(data[offset:], '[', ']') |
| 931 | |
| 932 | if endOffset == -1 { |
| 933 | return nil, dataType, offset, MalformedArrayError |
| 934 | } |
| 935 | |
| 936 | endOffset += offset |
| 937 | } else if data[offset] == '{' { // if object value |
| 938 | dataType = Object |
| 939 | // break label, for stopping nested loops |
| 940 | endOffset = blockEnd(data[offset:], '{', '}') |
| 941 | |
| 942 | if endOffset == -1 { |
| 943 | return nil, dataType, offset, MalformedObjectError |
| 944 | } |
| 945 | |
| 946 | endOffset += offset |
| 947 | } else { |
| 948 | // Number, Boolean or None |
| 949 | // tokenEnd returns len(data) when no delimiter is found, never -1, |
| 950 | // so the old end == -1 guard was dead code and has been removed. |
| 951 | end := tokenEnd(data[endOffset:]) |
| 952 | |
| 953 | value := data[offset : endOffset+end] |
| 954 | |
| 955 | switch data[offset] { |
| 956 | case 't', 'f': // true or false |
| 957 | if bytes.Equal(value, trueLiteral) || bytes.Equal(value, falseLiteral) { |
| 958 | dataType = Boolean |
| 959 | } else { |
| 960 | return nil, Unknown, offset, UnknownValueTypeError |
| 961 | } |
| 962 | case 'u', 'n': // undefined or null |
| 963 | if bytes.Equal(value, nullLiteral) { |
| 964 | dataType = Null |
| 965 | } else { |
| 966 | return nil, Unknown, offset, UnknownValueTypeError |
| 967 | } |
| 968 | case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-': |
| 969 | dataType = Number |
| 970 | default: |
| 971 | return nil, Unknown, offset, UnknownValueTypeError |
| 972 | } |
searching dependent graphs…