2020-05-26 10:34:43 +00:00
use crate ::{ InputValueError , InputValueResult , ScalarType , Value } ;
2020-04-27 09:58:10 +00:00
use async_graphql_derive ::Scalar ;
2020-03-02 00:24:49 +00:00
2020-07-28 14:13:07 +00:00
macro_rules ! float_scalar {
( $( $ty :ty ) , * ) = > {
$(
/// The `Float` scalar type represents signed double-precision fractional values as specified by [IEEE 754](https://en.wikipedia.org/wiki/IEEE_floating_point).
#[ Scalar(internal, name = " Float " ) ]
impl ScalarType for $ty {
fn parse ( value : Value ) -> InputValueResult < Self > {
match value {
Value ::Number ( n ) = > Ok ( n
. as_f64 ( )
. ok_or_else ( | | InputValueError ::from ( " Invalid number " ) ) ?
as Self ) ,
_ = > Err ( InputValueError ::ExpectedType ( value ) ) ,
}
}
2020-03-02 00:24:49 +00:00
2020-07-28 14:13:07 +00:00
fn is_valid ( value : & Value ) -> bool {
match value {
Value ::Number ( _ ) = > true ,
_ = > false ,
}
}
2020-03-02 00:24:49 +00:00
2020-07-28 14:13:07 +00:00
fn to_value ( & self ) -> Value {
Value ::Number ( serde_json ::Number ::from_f64 ( * self as f64 ) . unwrap ( ) )
}
2020-05-28 02:26:07 +00:00
}
2020-07-28 14:13:07 +00:00
) *
2020-05-28 02:26:07 +00:00
}
}
2020-07-28 14:13:07 +00:00
float_scalar! ( f32 , f64 ) ;