func decodeRow()

in azkustodata/query/v2/fast_json.go [202:248]


func decodeRow(
	buffer []byte,
	decoder *json.Decoder,
	cols []query.Column) (value.Values, error) {

	err := assertToken(decoder, json.Delim('['))
	if err != nil {
		return nil, err
	}

	values := make([]value.Kusto, 0, len(cols))

	field := 0

	for ; decoder.More(); field++ {
		t, err := decoder.Token()
		if err != nil {
			return nil, err
		}

		// Handle nested values
		if t == json.Delim('[') || t == json.Delim('{') {
			t, err = decodeNestedValue(decoder, buffer)
			if err != nil {
				return nil, err
			}
		}

		// Create a new value of the correct type
		kustoValue := value.Default(cols[field].Type())

		// Unmarshal the value
		err = kustoValue.Unmarshal(t)
		if err != nil {
			return nil, err
		}

		values = append(values, kustoValue)
	}

	err = assertToken(decoder, json.Delim(']'))
	if err != nil {
		return nil, err
	}

	return values, nil
}