MCPcopy Index your code
hub / github.com/segmentio/encoding / decodeStruct

Method decodeStruct

json/decode.go:1138–1232  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, st *structType)

Source from the content-addressed store, hash-verified

1136}
1137
1138func (d decoder) decodeStruct(b []byte, p unsafe.Pointer, st *structType) ([]byte, error) {
1139 if hasNullPrefix(b) {
1140 return b[4:], nil
1141 }
1142
1143 if len(b) < 2 || b[0] != '{' {
1144 return d.inputError(b, st.typ)
1145 }
1146
1147 var err error
1148 var k []byte
1149 var i int
1150
1151 // memory buffer used to convert short field names to lowercase
1152 var buf [64]byte
1153 var key []byte
1154 input := b
1155
1156 b = b[1:]
1157 for {
1158 b = skipSpaces(b)
1159
1160 if len(b) != 0 && b[0] == '}' {
1161 return b[1:], nil
1162 }
1163
1164 if i != 0 {
1165 if len(b) == 0 {
1166 return b, syntaxError(b, "unexpected end of JSON input after object field value")
1167 }
1168 if b[0] != ',' {
1169 return b, syntaxError(b, "expected ',' after object field value but found '%c'", b[0])
1170 }
1171 b = skipSpaces(b[1:])
1172 }
1173 i++
1174
1175 if hasNullPrefix(b) {
1176 return b, syntaxError(b, "cannot decode object key string from 'null' value")
1177 }
1178
1179 k, b, _, err = d.parseStringUnquote(b, nil)
1180 if err != nil {
1181 return objectKeyError(b, err)
1182 }
1183 b = skipSpaces(b)
1184
1185 if len(b) == 0 {
1186 return b, syntaxError(b, "unexpected end of JSON input after object field key")
1187 }
1188 if b[0] != ':' {
1189 return b, syntaxError(b, "expected ':' after object field key but found '%c'", b[0])
1190 }
1191 b = skipSpaces(b[1:])
1192
1193 var f *structField
1194 if len(st.keyset) != 0 {
1195 if n := keyset.Lookup(st.keyset, k); n < len(st.fields) {

Callers 1

Calls 11

inputErrorMethod · 0.95
parseStringUnquoteMethod · 0.95
parseValueMethod · 0.95
prependFieldMethod · 0.95
hasNullPrefixFunction · 0.85
skipSpacesFunction · 0.85
syntaxErrorFunction · 0.85
objectKeyErrorFunction · 0.85
appendToLowerFunction · 0.85
decodeMethod · 0.80
StringMethod · 0.65

Tested by

no test coverage detected