diff --git a/async-graphql-parser/src/query_parser.rs b/async-graphql-parser/src/query_parser.rs index 3606f015..a184fb6a 100644 --- a/async-graphql-parser/src/query_parser.rs +++ b/async-graphql-parser/src/query_parser.rs @@ -2,10 +2,11 @@ use crate::pos::Positioned; use crate::query::*; use crate::utils::{unquote_string, PositionCalculator}; use crate::value::Value; -use crate::Result; +use crate::{Error, Result}; use pest::iterators::Pair; use pest::Parser; use std::collections::BTreeMap; +use std::num::{ParseFloatError, ParseIntError}; #[derive(Parser)] #[grammar = "query.pest"] @@ -241,8 +242,24 @@ fn parse_value2(pair: Pair, pc: &mut PositionCalculator) -> Result Rule::object => parse_object_value(pair, pc)?, Rule::array => parse_array_value(pair, pc)?, Rule::variable => Value::Variable(parse_variable(pair, pc)?.into_inner()), - Rule::float => Value::Float(pair.as_str().parse().unwrap()), - Rule::int => Value::Int(pair.as_str().parse().unwrap()), + Rule::float => { + let pos = pc.step(&pair); + Value::Float( + pair.as_str() + .parse() + .map_err(|err: ParseFloatError| Error { + pos, + message: err.to_string(), + })?, + ) + } + Rule::int => { + let pos = pc.step(&pair); + Value::Int(pair.as_str().parse().map_err(|err: ParseIntError| Error { + pos, + message: err.to_string(), + })?) + } Rule::string => Value::String({ let pos = pc.step(&pair); unquote_string(pair.as_str(), pos)?