graphql_int64_scalar/
async_graphql.rs1use 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}