@@ -325,7 +325,11 @@ where
325
325
326
326
fn from_str < ' a > ( value : ScalarToken < ' a > ) -> ParseScalarResult < ' a , S > {
327
327
match value {
328
- ScalarToken :: Int ( v) | ScalarToken :: Float ( v) => v
328
+ ScalarToken :: Int ( v) => v
329
+ . parse ( )
330
+ . map_err ( |_| ParseError :: UnexpectedToken ( Token :: Scalar ( value) ) )
331
+ . map ( |s : i32 | f64:: from ( s) . into ( ) ) ,
332
+ ScalarToken :: Float ( v) => v
329
333
. parse ( )
330
334
. map_err ( |_| ParseError :: UnexpectedToken ( Token :: Scalar ( value) ) )
331
335
. map ( |s : f64 | s. into ( ) ) ,
@@ -334,7 +338,7 @@ where
334
338
}
335
339
}
336
340
337
- /// Utillity type to define read-only schemas
341
+ /// Utility type to define read-only schemas
338
342
///
339
343
/// If you instantiate `RootNode` with this as the mutation, no mutation will be
340
344
/// generated for the schema.
@@ -457,12 +461,13 @@ impl<T> Default for EmptySubscription<T> {
457
461
458
462
#[ cfg( test) ]
459
463
mod tests {
460
- use super :: { EmptyMutation , EmptySubscription , ID } ;
461
464
use crate :: {
462
465
parser:: ScalarToken ,
463
466
value:: { DefaultScalarValue , ParseScalarValue } ,
464
467
} ;
465
468
469
+ use super :: { EmptyMutation , EmptySubscription , ID } ;
470
+
466
471
#[ test]
467
472
fn test_id_from_string ( ) {
468
473
let actual = ID :: from ( String :: from ( "foo" ) ) ;
@@ -505,6 +510,42 @@ mod tests {
505
510
) ;
506
511
}
507
512
513
+ #[ test]
514
+ fn parse_f64_from_int ( ) {
515
+ for ( v, expected) in & [
516
+ ( "0" , 0 ) ,
517
+ ( "128" , 128 ) ,
518
+ ( "1601942400" , 1601942400 ) ,
519
+ ( "1696550400" , 1696550400 ) ,
520
+ ( "-1" , -1 ) ,
521
+ ] {
522
+ let n = <f64 as ParseScalarValue < DefaultScalarValue > >:: from_str ( ScalarToken :: Int ( v) ) ;
523
+ assert ! ( n. is_ok( ) , "A parsing error occurred: {:?}" , n. unwrap_err( ) ) ;
524
+
525
+ let n: Option < f64 > = n. unwrap ( ) . into ( ) ;
526
+ assert ! ( n. is_some( ) , "No f64 returned" ) ;
527
+ assert_eq ! ( n. unwrap( ) , f64 :: from( * expected) ) ;
528
+ }
529
+ }
530
+
531
+ #[ test]
532
+ fn parse_f64_from_float ( ) {
533
+ for ( v, expected) in & [
534
+ ( "0." , 0. ) ,
535
+ ( "1.2" , 1.2 ) ,
536
+ ( "1601942400." , 1601942400. ) ,
537
+ ( "1696550400." , 1696550400. ) ,
538
+ ( "-1.2" , -1.2 ) ,
539
+ ] {
540
+ let n = <f64 as ParseScalarValue < DefaultScalarValue > >:: from_str ( ScalarToken :: Float ( v) ) ;
541
+ assert ! ( n. is_ok( ) , "A parsing error occurred: {:?}" , n. unwrap_err( ) ) ;
542
+
543
+ let n: Option < f64 > = n. unwrap ( ) . into ( ) ;
544
+ assert ! ( n. is_some( ) , "No f64 returned" ) ;
545
+ assert_eq ! ( n. unwrap( ) , * expected) ;
546
+ }
547
+ }
548
+
508
549
#[ test]
509
550
fn empty_mutation_is_send ( ) {
510
551
fn check_if_send < T : Send > ( ) { }
0 commit comments