graphql_int64_scalar/
async_graphql.rs

1use async_graphql::{InputValueError, InputValueResult, Scalar, ScalarType, Value};
2
3use crate::{Int64Scalar, UInt64Scalar};
4
5#[Scalar]
6impl ScalarType for Int64Scalar {
7    fn parse(value: Value) -> InputValueResult<Self> {
8        match &value {
9            Value::String(string) => {
10                let integer: i64 = string
11                    .parse()
12                    .map_err(|_| InputValueError::custom(format!("Invalid value {}", value)))?;
13                Ok(Self(integer))
14            }
15            _ => Err(InputValueError::expected_type(value)),
16        }
17    }
18
19    fn to_value(&self) -> Value {
20        Value::String(self.0.to_string())
21    }
22}
23
24#[Scalar]
25impl ScalarType for UInt64Scalar {
26    fn parse(value: Value) -> InputValueResult<Self> {
27        match &value {
28            Value::String(string) => {
29                let integer: u64 = string
30                    .parse()
31                    .map_err(|_| InputValueError::custom(format!("Invalid value {}", value)))?;
32                Ok(Self(integer))
33            }
34            _ => Err(InputValueError::expected_type(value)),
35        }
36    }
37
38    fn to_value(&self) -> Value {
39        Value::String(self.0.to_string())
40    }
41}
42
43#[cfg(test)]
44mod tests {
45    use super::*;
46
47    use std::io;
48
49    #[test]
50    fn with_i64() -> io::Result<()> {
51        assert_eq!(
52            Int64Scalar(i64::MAX).to_value(),
53            Value::String("9223372036854775807".to_owned())
54        );
55        assert_eq!(
56            Int64Scalar::parse(Value::String("9223372036854775807".to_owned()))
57                .map_err(|err| io::Error::new(io::ErrorKind::Other, format!("{:?}", err)))?,
58            Int64Scalar(i64::MAX)
59        );
60        Ok(())
61    }
62
63    #[test]
64    fn with_u64() -> io::Result<()> {
65        assert_eq!(
66            UInt64Scalar(u64::MAX).to_value(),
67            Value::String("18446744073709551615".to_owned())
68        );
69        assert_eq!(
70            UInt64Scalar::parse(Value::String("18446744073709551615".to_owned()))
71                .map_err(|err| io::Error::new(io::ErrorKind::Other, format!("{:?}", err)))?,
72            UInt64Scalar(u64::MAX)
73        );
74        Ok(())
75    }
76}