azkustodata/query/v2/fast_json_utils.go (54 lines of code) (raw):

package v2 import ( "encoding/json" "github.com/Azure/azure-kusto-go/azkustodata/errors" ) // assertToken asserts that the next token in the decoder is the expected token. func assertToken(dec *json.Decoder, expected json.Token) error { t, err := dec.Token() if err != nil { return err } if t != expected { return errors.ES(errors.OpUnknown, errors.KInternal, "Expected %v, got %v", expected, t) } return nil } // assertStringProperty asserts that the next token in the decoder is a string property with the expected name and value. func assertStringProperty(dec *json.Decoder, name string, value json.Token) error { if err := assertToken(dec, json.Token(name)); err != nil { return err } if err := assertToken(dec, value); err != nil { return err } return nil } // getStringProperty reads a string property from the decoder, validating the name and returning the value. func getStringProperty(dec *json.Decoder, name string) (string, error) { if err := assertToken(dec, json.Token(name)); err != nil { return "", err } t, err := dec.Token() if err != nil { return "", err } if s, ok := t.(string); ok { return s, nil } return "", errors.ES(errors.OpUnknown, errors.KInternal, "Expected string, got %v", t) } // getIntProperty reads an int property from the decoder, validating the name and returning the value. func getIntProperty(dec *json.Decoder, name string) (int, error) { if err := assertToken(dec, json.Token(name)); err != nil { return 0, err } t, err := dec.Token() if err != nil { return 0, err } if s, ok := t.(json.Number); ok { i, err := s.Int64() if err != nil { return 0, err } return int(i), nil } return 0, errors.ES(errors.OpUnknown, errors.KInternal, "Expected string, got %v", t) }