diff --git a/graphql_parser/src/graphql_parser.ml b/graphql_parser/src/graphql_parser.ml index 4f38f21..6351d78 100644 --- a/graphql_parser/src/graphql_parser.ml +++ b/graphql_parser/src/graphql_parser.ml @@ -188,11 +188,14 @@ let string_value = lift (fun s -> `String s) (quote *> string_chars <* quote) let boolean_value = string "true" *> return (`Bool true) <|> string "false" *> return (`Bool false) -let number_value = lift (fun n -> +let number_value = number_chars >>= fun n -> try - `Int (int_of_string n) + return (`Int (int_of_string n)) with Failure _ -> - `Float (float_of_string n)) number_chars + try + return (`Float (float_of_string n)) + with Failure _ -> + fail (Format.sprintf "Invalid number value: %s" n) let enum_value = name >>= function | "true" diff --git a/graphql_parser/test/data/kitchen_sink.graphql b/graphql_parser/test/data/kitchen_sink.graphql index 20dbf6d..52e19b5 100644 --- a/graphql_parser/test/data/kitchen_sink.graphql +++ b/graphql_parser/test/data/kitchen_sink.graphql @@ -45,6 +45,6 @@ fragment frag on Friend { } { - unnamed(truthy: true, falsey: false, nullish: null), + unnamed(truthy: true, falsey: false, nullish: null, enum: ECHO), query -} \ No newline at end of file +} diff --git a/graphql_parser/test/data/kitchen_sink.sexp b/graphql_parser/test/data/kitchen_sink.sexp index 186f75e..a4248f9 100644 --- a/graphql_parser/test/data/kitchen_sink.sexp +++ b/graphql_parser/test/data/kitchen_sink.sexp @@ -100,7 +100,8 @@ ((Field ((alias ()) (name unnamed) (arguments - ((truthy (Bool true)) (falsey (Bool false)) (nullish Null))) + ((truthy (Bool true)) (falsey (Bool false)) (nullish Null) + (enum (Enum ECHO)))) (directives ()) (selection_set ()))) (Field ((alias ()) (name query) (arguments ()) (directives ())