From d00e74bb4ebb6ffa6a0c95ded4e68147b566140b Mon Sep 17 00:00:00 2001 From: Christoph Herzog <chris@theduke.at> Date: Sat, 13 Jan 2018 12:25:55 +0100 Subject: [PATCH] Format entire codebase with rustfmt --- juniper/src/ast.rs | 6 +- juniper/src/executor/mod.rs | 32 +- juniper/src/executor_tests/directives.rs | 59 +- juniper/src/executor_tests/enums.rs | 64 +- juniper/src/executor_tests/executor.rs | 379 +++++--- .../src/executor_tests/interfaces_unions.rs | 101 ++- .../src/executor_tests/introspection/enums.rs | 252 ++++-- .../introspection/input_object.rs | 419 ++++++--- .../src/executor_tests/introspection/mod.rs | 334 ++++--- juniper/src/executor_tests/variables.rs | 841 ++++++++++-------- juniper/src/http/graphiql.rs | 1 - juniper/src/http/mod.rs | 3 +- juniper/src/integrations/chrono.rs | 6 +- juniper/src/integrations/serde.rs | 5 +- juniper/src/integrations/url.rs | 2 +- juniper/src/integrations/uuid.rs | 4 +- juniper/src/lib.rs | 2 - juniper/src/macros/field.rs | 22 +- juniper/src/macros/interface.rs | 32 +- juniper/src/macros/object.rs | 13 +- juniper/src/macros/scalar.rs | 5 +- juniper/src/macros/tests/args.rs | 723 ++++++++++----- juniper/src/macros/tests/field.rs | 45 +- juniper/src/macros/tests/interface.rs | 145 ++- juniper/src/macros/tests/mod.rs | 3 - juniper/src/macros/tests/object.rs | 156 ++-- juniper/src/macros/tests/scalar.rs | 10 +- juniper/src/macros/tests/union.rs | 107 ++- juniper/src/macros/union.rs | 9 +- juniper/src/parser/document.rs | 25 +- juniper/src/parser/lexer.rs | 28 +- juniper/src/parser/parser.rs | 10 +- juniper/src/parser/tests/value.rs | 1 - juniper/src/parser/value.rs | 44 +- juniper/src/schema/meta.rs | 194 ++-- juniper/src/schema/model.rs | 42 +- juniper/src/schema/schema.rs | 10 +- juniper/src/tests/model.rs | 3 +- juniper/src/tests/schema.rs | 1 - juniper/src/types/base.rs | 12 +- juniper/src/types/containers.rs | 14 +- juniper/src/types/scalars.rs | 8 - juniper/src/types/utilities.rs | 23 +- juniper/src/validation/input_value.rs | 4 +- .../rules/arguments_of_correct_type.rs | 4 +- .../rules/default_values_of_correct_type.rs | 6 +- .../rules/fields_on_correct_type.rs | 1 - .../rules/fragments_on_composite_types.rs | 3 +- .../validation/rules/known_argument_names.rs | 15 +- .../src/validation/rules/known_directives.rs | 3 +- .../rules/no_undefined_variables.rs | 3 +- .../validation/rules/no_unused_variables.rs | 3 +- .../rules/overlapping_fields_can_be_merged.rs | 56 +- .../rules/possible_fragment_spreads.rs | 7 +- .../rules/provided_non_null_arguments.rs | 16 +- juniper/src/validation/rules/scalar_leafs.rs | 3 +- .../rules/variables_are_input_types.rs | 3 +- .../rules/variables_in_allowed_position.rs | 4 +- juniper/src/validation/test_harness.rs | 9 +- juniper/src/validation/traits.rs | 1 - juniper/src/validation/visitor.rs | 33 +- juniper/src/value.rs | 65 +- juniper_codegen/src/derive_enum.rs | 19 +- juniper_codegen/src/derive_input_object.rs | 14 +- juniper_codegen/src/derive_object.rs | 15 +- juniper_codegen/src/lib.rs | 2 +- juniper_codegen/src/util.rs | 3 +- juniper_iron/examples/iron_server.rs | 6 +- juniper_iron/src/lib.rs | 37 +- juniper_rocket/examples/rocket_server.rs | 2 +- juniper_rocket/src/lib.rs | 52 +- juniper_tests/src/codegen/derive_enum.rs | 13 +- .../src/codegen/derive_input_object.rs | 32 +- juniper_tests/src/codegen/derive_object.rs | 67 +- 74 files changed, 2910 insertions(+), 1786 deletions(-) diff --git a/juniper/src/ast.rs b/juniper/src/ast.rs index 1ae53929..20b08872 100644 --- a/juniper/src/ast.rs +++ b/juniper/src/ast.rs @@ -402,9 +402,9 @@ impl InputValue { (&Null, &Null) => true, (&Int(i1), &Int(i2)) => i1 == i2, (&Float(f1), &Float(f2)) => f1 == f2, - (&String(ref s1), &String(ref s2)) | - (&Enum(ref s1), &Enum(ref s2)) | - (&Variable(ref s1), &Variable(ref s2)) => s1 == s2, + (&String(ref s1), &String(ref s2)) + | (&Enum(ref s1), &Enum(ref s2)) + | (&Variable(ref s1), &Variable(ref s2)) => s1 == s2, (&Boolean(b1), &Boolean(b2)) => b1 == b2, (&List(ref l1), &List(ref l2)) => l1.iter() .zip(l2.iter()) diff --git a/juniper/src/executor/mod.rs b/juniper/src/executor/mod.rs index 5e84c4b7..d2001572 100644 --- a/juniper/src/executor/mod.rs +++ b/juniper/src/executor/mod.rs @@ -68,15 +68,21 @@ impl Eq for ExecutionError {} impl PartialOrd for ExecutionError { fn partial_cmp(&self, other: &ExecutionError) -> Option<Ordering> { - (&self.location, &self.path, &self.error.message) - .partial_cmp(&(&other.location, &other.path, &other.error.message)) + (&self.location, &self.path, &self.error.message).partial_cmp(&( + &other.location, + &other.path, + &other.error.message, + )) } } impl Ord for ExecutionError { fn cmp(&self, other: &ExecutionError) -> Ordering { - (&self.location, &self.path, &self.error.message) - .cmp(&(&other.location, &other.path, &other.error.message)) + (&self.location, &self.path, &self.error.message).cmp(&( + &other.location, + &other.path, + &other.error.message, + )) } } @@ -213,7 +219,8 @@ impl<'a, T: GraphQLType, C> IntoResolvable<'a, T, C> for FieldResult<(&'a T::Con } } -impl<'a, T: GraphQLType, C> IntoResolvable<'a, Option<T>, C> for FieldResult<Option<(&'a T::Context, T)>> { +impl<'a, T: GraphQLType, C> IntoResolvable<'a, Option<T>, C> + for FieldResult<Option<(&'a T::Context, T)>> { fn into(self, _: &'a C) -> FieldResult<Option<(&'a T::Context, Option<T>)>> { self.map(|o| o.map(|(ctx, v)| (ctx, Some(v)))) } @@ -329,8 +336,10 @@ impl<'a, CtxT> Executor<'a, CtxT> { current_type: self.schema.make_type( &self.current_type .innermost_concrete() - .field_by_name(field_name).expect("Field not found on inner type") - .field_type), + .field_by_name(field_name) + .expect("Field not found on inner type") + .field_type, + ), schema: self.schema, context: self.context, errors: self.errors, @@ -478,8 +487,8 @@ where return Err(GraphQLError::MultipleOperationsProvided); } - let move_op = operation_name.is_none() || - op.item.name.as_ref().map(|s| s.item.as_ref()) == operation_name; + let move_op = operation_name.is_none() + || op.item.name.as_ref().map(|s| s.item.as_ref()) == operation_name; if move_op { operation = Some(op); @@ -525,7 +534,10 @@ where let root_type = match op.item.operation_type { OperationType::Query => root_node.schema.query_type(), - OperationType::Mutation => root_node.schema.mutation_type().expect("No mutation type found") + OperationType::Mutation => root_node + .schema + .mutation_type() + .expect("No mutation type found"), }; let executor = Executor { diff --git a/juniper/src/executor_tests/directives.rs b/juniper/src/executor_tests/directives.rs index 3d20926c..5bcc53a2 100644 --- a/juniper/src/executor_tests/directives.rs +++ b/juniper/src/executor_tests/directives.rs @@ -73,47 +73,50 @@ fn scalar_skip_true() { }); } - - - #[test] fn fragment_spread_include_true() { - run_query("{ a, ...Frag @include(if: true) } fragment Frag on TestType { b }", - |result| { - assert_eq!(result.get("a"), Some(&Value::string("a"))); - assert_eq!(result.get("b"), Some(&Value::string("b"))); - }); + run_query( + "{ a, ...Frag @include(if: true) } fragment Frag on TestType { b }", + |result| { + assert_eq!(result.get("a"), Some(&Value::string("a"))); + assert_eq!(result.get("b"), Some(&Value::string("b"))); + }, + ); } #[test] fn fragment_spread_include_false() { - run_query("{ a, ...Frag @include(if: false) } fragment Frag on TestType { b }", - |result| { - assert_eq!(result.get("a"), Some(&Value::string("a"))); - assert_eq!(result.get("b"), None); - }); + run_query( + "{ a, ...Frag @include(if: false) } fragment Frag on TestType { b }", + |result| { + assert_eq!(result.get("a"), Some(&Value::string("a"))); + assert_eq!(result.get("b"), None); + }, + ); } #[test] fn fragment_spread_skip_false() { - run_query("{ a, ...Frag @skip(if: false) } fragment Frag on TestType { b }", - |result| { - assert_eq!(result.get("a"), Some(&Value::string("a"))); - assert_eq!(result.get("b"), Some(&Value::string("b"))); - }); + run_query( + "{ a, ...Frag @skip(if: false) } fragment Frag on TestType { b }", + |result| { + assert_eq!(result.get("a"), Some(&Value::string("a"))); + assert_eq!(result.get("b"), Some(&Value::string("b"))); + }, + ); } #[test] fn fragment_spread_skip_true() { - run_query("{ a, ...Frag @skip(if: true) } fragment Frag on TestType { b }", - |result| { - assert_eq!(result.get("a"), Some(&Value::string("a"))); - assert_eq!(result.get("b"), None); - }); + run_query( + "{ a, ...Frag @skip(if: true) } fragment Frag on TestType { b }", + |result| { + assert_eq!(result.get("a"), Some(&Value::string("a"))); + assert_eq!(result.get("b"), None); + }, + ); } - - #[test] fn inline_fragment_include_true() { run_query( @@ -152,9 +155,6 @@ fn inline_fragment_skip_true() { }); } - - - #[test] fn anonymous_inline_fragment_include_true() { run_query("{ a, ... @include(if: true) { b } }", |result| { @@ -187,9 +187,6 @@ fn anonymous_inline_fragment_skip_true() { }); } - - - #[test] fn scalar_include_true_skip_true() { run_query("{ a, b @include(if: true) @skip(if: true) }", |result| { diff --git a/juniper/src/executor_tests/enums.rs b/juniper/src/executor_tests/enums.rs index 5258edfa..be85e5bd 100644 --- a/juniper/src/executor_tests/enums.rs +++ b/juniper/src/executor_tests/enums.rs @@ -55,18 +55,14 @@ where #[test] fn accepts_enum_literal() { run_query("{ toString(color: RED) }", |result| { - assert_eq!( - result.get("toString"), - Some(&Value::string("Color::Red"))); + assert_eq!(result.get("toString"), Some(&Value::string("Color::Red"))); }); } #[test] fn serializes_as_output() { run_query("{ aColor }", |result| { - assert_eq!( - result.get("aColor"), - Some(&Value::string("RED"))); + assert_eq!(result.get("aColor"), Some(&Value::string("RED"))); }); } @@ -79,26 +75,26 @@ fn does_not_accept_string_literals() { let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Invalid value for argument "color", expected type "Color!""#, - &[SourcePosition::new(18, 0, 18)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Invalid value for argument "color", expected type "Color!""#, + &[SourcePosition::new(18, 0, 18)], + ), + ]) + ); } #[test] fn accepts_strings_in_variables() { run_variable_query( "query q($color: Color!) { toString(color: $color) }", - vec![ - ("color".to_owned(), InputValue::string("RED")), - ].into_iter() + vec![("color".to_owned(), InputValue::string("RED"))] + .into_iter() .collect(), |result| { - assert_eq!( - result.get("toString"), - Some(&Value::string("Color::Red"))); + assert_eq!(result.get("toString"), Some(&Value::string("Color::Red"))); }, ); } @@ -108,19 +104,21 @@ fn does_not_accept_incorrect_enum_name_in_variables() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($color: Color!) { toString(color: $color) }"#; - let vars = vec![ - ("color".to_owned(), InputValue::string("BLURPLE")), - ].into_iter() + let vars = vec![("color".to_owned(), InputValue::string("BLURPLE"))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$color" got invalid value. Invalid value for enum "Color"."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$color" got invalid value. Invalid value for enum "Color"."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] @@ -128,17 +126,19 @@ fn does_not_accept_incorrect_type_in_variables() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($color: Color!) { toString(color: $color) }"#; - let vars = vec![ - ("color".to_owned(), InputValue::int(123)), - ].into_iter() + let vars = vec![("color".to_owned(), InputValue::int(123))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ + assert_eq!( + error, + ValidationError(vec![ RuleError::new( r#"Variable "$color" got invalid value. Expected "Color", found not a string or enum."#, &[SourcePosition::new(8, 0, 8)], ), - ])); + ]) + ); } diff --git a/juniper/src/executor_tests/executor.rs b/juniper/src/executor_tests/executor.rs index ceca4b31..ba46f819 100644 --- a/juniper/src/executor_tests/executor.rs +++ b/juniper/src/executor_tests/executor.rs @@ -61,9 +61,8 @@ mod field_execution { e }"; - let vars = vec![ - ("size".to_owned(), InputValue::int(100)) - ].into_iter() + let vars = vec![("size".to_owned(), InputValue::int(100))] + .into_iter() .collect(); let (result, errs) = ::execute(doc, None, &schema, &vars, &()).expect("Execution failed"); @@ -74,39 +73,60 @@ mod field_execution { assert_eq!( result, - Value::object(vec![ - ("a", Value::string("Apple")), - ("b", Value::string("Banana")), - ("x", Value::string("Cookie")), - ("d", Value::string("Donut")), - ("e", Value::string("Egg")), - ("f", Value::string("Fish")), - ("pic", Value::string("Pic of size: 100")), - ("deep", Value::object(vec![ - ("a", Value::string("Already Been Done")), - ("b", Value::string("Boring")), - ("c", Value::list(vec![ - Value::string("Contrived"), - Value::null(), - Value::string("Confusing"), - ])), - ("deeper", Value::list(vec![ - Value::object(vec![ - ("a", Value::string("Apple")), - ("b", Value::string("Banana")), - ].into_iter().collect()), - Value::null(), - Value::object(vec![ - ("a", Value::string("Apple")), - ("b", Value::string("Banana")), - ].into_iter().collect()), - ])), - ].into_iter().collect())), - ].into_iter().collect())); + Value::object( + vec![ + ("a", Value::string("Apple")), + ("b", Value::string("Banana")), + ("x", Value::string("Cookie")), + ("d", Value::string("Donut")), + ("e", Value::string("Egg")), + ("f", Value::string("Fish")), + ("pic", Value::string("Pic of size: 100")), + ( + "deep", + Value::object( + vec![ + ("a", Value::string("Already Been Done")), + ("b", Value::string("Boring")), + ( + "c", + Value::list(vec![ + Value::string("Contrived"), + Value::null(), + Value::string("Confusing"), + ]), + ), + ( + "deeper", + Value::list(vec![ + Value::object( + vec![ + ("a", Value::string("Apple")), + ("b", Value::string("Banana")), + ].into_iter() + .collect(), + ), + Value::null(), + Value::object( + vec![ + ("a", Value::string("Apple")), + ("b", Value::string("Banana")), + ].into_iter() + .collect(), + ), + ]), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + ) + ); } } - mod merge_parallel_fragments { use value::Value; use schema::model::RootNode; @@ -145,19 +165,35 @@ mod merge_parallel_fragments { assert_eq!( result, - Value::object(vec![ - ("a", Value::string("Apple")), - ("b", Value::string("Banana")), - ("deep", Value::object(vec![ + Value::object( + vec![ + ("a", Value::string("Apple")), ("b", Value::string("Banana")), - ("deeper", Value::object(vec![ - ("b", Value::string("Banana")), - ("c", Value::string("Cherry")), - ].into_iter().collect())), + ( + "deep", + Value::object( + vec![ + ("b", Value::string("Banana")), + ( + "deeper", + Value::object( + vec![ + ("b", Value::string("Banana")), + ("c", Value::string("Cherry")), + ].into_iter() + .collect(), + ), + ), + ("c", Value::string("Cherry")), + ].into_iter() + .collect(), + ), + ), ("c", Value::string("Cherry")), - ].into_iter().collect())), - ("c", Value::string("Cherry")), - ].into_iter().collect())); + ].into_iter() + .collect() + ) + ); } } @@ -202,9 +238,12 @@ mod threads_context_correctly { assert_eq!( result, - Value::object(vec![ - ("a", Value::string("Context value")), - ].into_iter().collect())); + Value::object( + vec![("a", Value::string("Context value"))] + .into_iter() + .collect() + ) + ); } } @@ -272,8 +311,18 @@ mod dynamic_context_switching { let ctx = OuterContext { items: vec![ - (0, InnerContext { value: "First value".to_owned() }), - (1, InnerContext { value: "Second value".to_owned() }), + ( + 0, + InnerContext { + value: "First value".to_owned(), + }, + ), + ( + 1, + InnerContext { + value: "Second value".to_owned(), + }, + ), ].into_iter() .collect(), }; @@ -286,12 +335,21 @@ mod dynamic_context_switching { assert_eq!( result, - Value::object(vec![ - ("first", Value::object(vec![ - ("value", Value::string("First value")), - ].into_iter().collect())), - ("missing", Value::null()), - ].into_iter().collect())); + Value::object( + vec![ + ( + "first", + Value::object( + vec![("value", Value::string("First value"))] + .into_iter() + .collect(), + ), + ), + ("missing", Value::null()), + ].into_iter() + .collect() + ) + ); } #[test] @@ -307,8 +365,18 @@ mod dynamic_context_switching { let ctx = OuterContext { items: vec![ - (0, InnerContext { value: "First value".to_owned() }), - (1, InnerContext { value: "Second value".to_owned() }), + ( + 0, + InnerContext { + value: "First value".to_owned(), + }, + ), + ( + 1, + InnerContext { + value: "Second value".to_owned(), + }, + ), ].into_iter() .collect(), }; @@ -321,11 +389,20 @@ mod dynamic_context_switching { assert_eq!( result, - Value::object(vec![ - ("first", Value::object(vec![ - ("value", Value::string("First value")), - ].into_iter().collect())), - ].into_iter().collect())); + Value::object( + vec![ + ( + "first", + Value::object( + vec![("value", Value::string("First value"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + ) + ); } #[test] @@ -341,21 +418,34 @@ mod dynamic_context_switching { let ctx = OuterContext { items: vec![ - (0, InnerContext { value: "First value".to_owned() }), - (1, InnerContext { value: "Second value".to_owned() }), + ( + 0, + InnerContext { + value: "First value".to_owned(), + }, + ), + ( + 1, + InnerContext { + value: "Second value".to_owned(), + }, + ), ].into_iter() .collect(), }; let (result, errs) = ::execute(doc, None, &schema, &vars, &ctx).expect("Execution failed"); - assert_eq!(errs, vec![ - ExecutionError::new( - SourcePosition::new(25, 2, 12), - &["missing"], - FieldError::new("Could not find key 2", Value::null()), - ), - ]); + assert_eq!( + errs, + vec![ + ExecutionError::new( + SourcePosition::new(25, 2, 12), + &["missing"], + FieldError::new("Could not find key 2", Value::null()), + ), + ] + ); println!("Result: {:?}", result); @@ -377,33 +467,55 @@ mod dynamic_context_switching { let ctx = OuterContext { items: vec![ - (0, InnerContext { value: "First value".to_owned() }), - (1, InnerContext { value: "Second value".to_owned() }), + ( + 0, + InnerContext { + value: "First value".to_owned(), + }, + ), + ( + 1, + InnerContext { + value: "Second value".to_owned(), + }, + ), ].into_iter() .collect(), }; let (result, errs) = ::execute(doc, None, &schema, &vars, &ctx).expect("Execution failed"); - assert_eq!(errs, [ - ExecutionError::new( - SourcePosition::new(123, 4, 12), - &["tooLarge"], - FieldError::new("Key too large: 200", Value::null()), - ), - ]); + assert_eq!( + errs, + [ + ExecutionError::new( + SourcePosition::new(123, 4, 12), + &["tooLarge"], + FieldError::new("Key too large: 200", Value::null()), + ), + ] + ); println!("Result: {:?}", result); assert_eq!( result, - Value::object(vec![ - ("first", Value::object(vec![ - ("value", Value::string("First value")), - ].into_iter().collect())), - ("missing", Value::null()), - ("tooLarge", Value::null()), - ].into_iter().collect())); + Value::object( + vec![ + ( + "first", + Value::object( + vec![("value", Value::string("First value"))] + .into_iter() + .collect(), + ), + ), + ("missing", Value::null()), + ("tooLarge", Value::null()), + ].into_iter() + .collect() + ) + ); } #[test] @@ -415,8 +527,18 @@ mod dynamic_context_switching { let ctx = OuterContext { items: vec![ - (0, InnerContext { value: "First value".to_owned() }), - (1, InnerContext { value: "Second value".to_owned() }), + ( + 0, + InnerContext { + value: "First value".to_owned(), + }, + ), + ( + 1, + InnerContext { + value: "Second value".to_owned(), + }, + ), ].into_iter() .collect(), }; @@ -429,11 +551,20 @@ mod dynamic_context_switching { assert_eq!( result, - Value::object(vec![ - ("first", Value::object(vec![ - ("value", Value::string("First value")), - ].into_iter().collect())), - ].into_iter().collect())); + Value::object( + vec![ + ( + "first", + Value::object( + vec![("value", Value::string("First value"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + ) + ); } } @@ -473,7 +604,8 @@ mod propagates_errors_to_nullable_fields { assert_eq!( result, - graphql_value!({ "inner": { "nullableErrorField": None } })); + graphql_value!({ "inner": { "nullableErrorField": None } }) + ); assert_eq!( errs, @@ -483,7 +615,8 @@ mod propagates_errors_to_nullable_fields { &["inner", "nullableErrorField"], FieldError::new("Error for nullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -497,9 +630,7 @@ mod propagates_errors_to_nullable_fields { println!("Result: {:?}", result); - assert_eq!( - result, - graphql_value!(None)); + assert_eq!(result, graphql_value!(None)); assert_eq!( errs, @@ -509,7 +640,8 @@ mod propagates_errors_to_nullable_fields { &["inner", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -525,7 +657,8 @@ mod propagates_errors_to_nullable_fields { assert_eq!( result, - graphql_value!({ "inner": { "nullableField": None } })); + graphql_value!({ "inner": { "nullableField": None } }) + ); assert_eq!( errs, @@ -535,7 +668,8 @@ mod propagates_errors_to_nullable_fields { &["inner", "nullableField", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -549,9 +683,7 @@ mod propagates_errors_to_nullable_fields { println!("Result: {:?}", result); - assert_eq!( - result, - graphql_value!(None)); + assert_eq!(result, graphql_value!(None)); assert_eq!( errs, @@ -561,7 +693,8 @@ mod propagates_errors_to_nullable_fields { &["inner", "nonNullableField", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -577,7 +710,8 @@ mod propagates_errors_to_nullable_fields { assert_eq!( result, - graphql_value!({ "inner": { "nonNullableField": { "nullableErrorField": None } } })); + graphql_value!({ "inner": { "nonNullableField": { "nullableErrorField": None } } }) + ); assert_eq!( errs, @@ -587,7 +721,8 @@ mod propagates_errors_to_nullable_fields { &["inner", "nonNullableField", "nullableErrorField"], FieldError::new("Error for nullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -601,9 +736,7 @@ mod propagates_errors_to_nullable_fields { println!("Result: {:?}", result); - assert_eq!( - result, - graphql_value!(None)); + assert_eq!(result, graphql_value!(None)); assert_eq!( errs, @@ -613,7 +746,8 @@ mod propagates_errors_to_nullable_fields { &["inners", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), - ]); + ] + ); } #[test] @@ -629,7 +763,8 @@ mod propagates_errors_to_nullable_fields { assert_eq!( result, - graphql_value!({ "nullableInners": [None, None, None, None, None] })); + graphql_value!({ "nullableInners": [None, None, None, None, None] }) + ); assert_eq!( errs, @@ -659,7 +794,8 @@ mod propagates_errors_to_nullable_fields { &["nullableInners", "nonNullableErrorField"], FieldError::new("Error for nonNullableErrorField", Value::null()), ), - ]); + ] + ); } } @@ -688,9 +824,8 @@ mod named_operations { assert_eq!( result, - Value::object(vec![ - ("a", Value::string("b")), - ].into_iter().collect())); + Value::object(vec![("a", Value::string("b"))].into_iter().collect()) + ); } #[test] @@ -706,9 +841,8 @@ mod named_operations { assert_eq!( result, - Value::object(vec![ - ("a", Value::string("b")), - ].into_iter().collect())); + Value::object(vec![("a", Value::string("b"))].into_iter().collect()) + ); } #[test] @@ -725,9 +859,8 @@ mod named_operations { assert_eq!( result, - Value::object(vec![ - ("second", Value::string("b")), - ].into_iter().collect())); + Value::object(vec![("second", Value::string("b"))].into_iter().collect()) + ); } #[test] diff --git a/juniper/src/executor_tests/interfaces_unions.rs b/juniper/src/executor_tests/interfaces_unions.rs index 1ac2e1da..7be8b38e 100644 --- a/juniper/src/executor_tests/interfaces_unions.rs +++ b/juniper/src/executor_tests/interfaces_unions.rs @@ -80,8 +80,14 @@ mod interface { let schema = RootNode::new( Schema { pets: vec![ - Box::new(Dog { name: "Odie".to_owned(), woofs: true }), - Box::new(Cat { name: "Garfield".to_owned(), meows: false }), + Box::new(Dog { + name: "Odie".to_owned(), + woofs: true, + }), + Box::new(Cat { + name: "Garfield".to_owned(), + meows: false, + }), ], }, EmptyMutation::<()>::new(), @@ -109,24 +115,34 @@ mod interface { assert_eq!( result, - Value::object(vec![ - ("pets", Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Odie")), - ("woofs", Value::boolean(true)), - ].into_iter().collect()), - Value::object(vec![ - ("name", Value::string("Garfield")), - ("meows", Value::boolean(false)), - ].into_iter().collect()), - ])), - ].into_iter().collect())); + Value::object( + vec![ + ( + "pets", + Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Odie")), + ("woofs", Value::boolean(true)), + ].into_iter() + .collect(), + ), + Value::object( + vec![ + ("name", Value::string("Garfield")), + ("meows", Value::boolean(false)), + ].into_iter() + .collect(), + ), + ]), + ), + ].into_iter() + .collect() + ) + ); } } - - - mod union { use value::Value; use schema::model::RootNode; @@ -195,8 +211,14 @@ mod union { let schema = RootNode::new( Schema { pets: vec![ - Box::new(Dog { name: "Odie".to_owned(), woofs: true }), - Box::new(Cat { name: "Garfield".to_owned(), meows: false }), + Box::new(Dog { + name: "Odie".to_owned(), + woofs: true, + }), + Box::new(Cat { + name: "Garfield".to_owned(), + meows: false, + }), ], }, EmptyMutation::<()>::new(), @@ -226,19 +248,32 @@ mod union { assert_eq!( result, - Value::object(vec![ - ("pets", Value::list(vec![ - Value::object(vec![ - ("__typename", Value::string("Dog")), - ("name", Value::string("Odie")), - ("woofs", Value::boolean(true)), - ].into_iter().collect()), - Value::object(vec![ - ("__typename", Value::string("Cat")), - ("name", Value::string("Garfield")), - ("meows", Value::boolean(false)), - ].into_iter().collect()), - ])), - ].into_iter().collect())); + Value::object( + vec![ + ( + "pets", + Value::list(vec![ + Value::object( + vec![ + ("__typename", Value::string("Dog")), + ("name", Value::string("Odie")), + ("woofs", Value::boolean(true)), + ].into_iter() + .collect(), + ), + Value::object( + vec![ + ("__typename", Value::string("Cat")), + ("name", Value::string("Garfield")), + ("meows", Value::boolean(false)), + ].into_iter() + .collect(), + ), + ]), + ), + ].into_iter() + .collect() + ) + ); } } diff --git a/juniper/src/executor_tests/introspection/enums.rs b/juniper/src/executor_tests/introspection/enums.rs index 9ffc5c9f..5a40c342 100644 --- a/juniper/src/executor_tests/introspection/enums.rs +++ b/juniper/src/executor_tests/introspection/enums.rs @@ -48,19 +48,15 @@ enum EnumDescription { #[derive(GraphQLEnum)] #[graphql(_internal)] enum EnumValueDescription { - #[graphql(description = "The FOO value")] - Foo, - #[graphql(description = "The BAR value")] - Bar, + #[graphql(description = "The FOO value")] Foo, + #[graphql(description = "The BAR value")] Bar, } #[derive(GraphQLEnum)] #[graphql(_internal)] enum EnumDeprecation { - #[graphql(deprecated = "Please don't use FOO any more")] - Foo, - #[graphql(description = "The BAR value", deprecated = "Please don't use BAR any more")] - Bar, + #[graphql(deprecated = "Please don't use FOO any more")] Foo, + #[graphql(description = "The BAR value", deprecated = "Please don't use BAR any more")] Bar, } struct Root; @@ -127,19 +123,29 @@ fn default_name_introspection() { assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -166,19 +172,29 @@ fn named_introspection() { assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -200,24 +216,37 @@ fn no_trailing_comma_introspection() { "#; run_type_info_query(doc, |(type_info, values)| { - assert_eq!(type_info.get("name"), Some(&Value::string("NoTrailingComma"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("NoTrailingComma")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -239,24 +268,40 @@ fn enum_description_introspection() { "#; run_type_info_query(doc, |(type_info, values)| { - assert_eq!(type_info.get("name"), Some(&Value::string("EnumDescription"))); - assert_eq!(type_info.get("description"), Some(&Value::string("A description of the enum itself"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("EnumDescription")) + ); + assert_eq!( + type_info.get("description"), + Some(&Value::string("A description of the enum itself")) + ); assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -278,24 +323,37 @@ fn enum_value_description_introspection() { "#; run_type_info_query(doc, |(type_info, values)| { - assert_eq!(type_info.get("name"), Some(&Value::string("EnumValueDescription"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("EnumValueDescription")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::string("The FOO value")), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::string("The FOO value")), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::string("The BAR value")), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::string("The BAR value")), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -317,24 +375,43 @@ fn enum_deprecation_introspection() { "#; run_type_info_query(doc, |(type_info, values)| { - assert_eq!(type_info.get("name"), Some(&Value::string("EnumDeprecation"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("EnumDeprecation")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("FOO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(true)), - ("deprecationReason", Value::string("Please don't use FOO any more")), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("FOO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(true)), + ( + "deprecationReason", + Value::string("Please don't use FOO any more"), + ), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("BAR")), - ("description", Value::string("The BAR value")), - ("isDeprecated", Value::boolean(true)), - ("deprecationReason", Value::string("Please don't use BAR any more")), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("BAR")), + ("description", Value::string("The BAR value")), + ("isDeprecated", Value::boolean(true)), + ( + "deprecationReason", + Value::string("Please don't use BAR any more"), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -356,7 +433,10 @@ fn enum_deprecation_no_values_introspection() { "#; run_type_info_query(doc, |(type_info, values)| { - assert_eq!(type_info.get("name"), Some(&Value::string("EnumDeprecation"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("EnumDeprecation")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(values.len(), 0); diff --git a/juniper/src/executor_tests/introspection/input_object.rs b/juniper/src/executor_tests/introspection/input_object.rs index c4e15758..9e3586be 100644 --- a/juniper/src/executor_tests/introspection/input_object.rs +++ b/juniper/src/executor_tests/introspection/input_object.rs @@ -19,7 +19,7 @@ struct DefaultName { #[graphql(_internal)] struct NoTrailingComma { field_one: String, - field_two: String + field_two: String, } #[derive(GraphQLInputObject, Debug)] @@ -54,8 +54,7 @@ pub struct PublicWithDescription { #[derive(GraphQLInputObject, Debug)] #[graphql(name = "APublicNamedInputObjectWithDescription", - description = "Description for the input object", - _internal)] + description = "Description for the input object", _internal)] pub struct NamedPublicWithDescription { field_one: String, } @@ -69,19 +68,15 @@ pub struct NamedPublic { #[derive(GraphQLInputObject, Debug)] #[graphql(_internal)] struct FieldDescription { - #[graphql(description = "The first field")] - field_one: String, - #[graphql(description = "The second field")] - field_two: String, + #[graphql(description = "The first field")] field_one: String, + #[graphql(description = "The second field")] field_two: String, } #[derive(GraphQLInputObject, Debug)] #[graphql(_internal)] struct FieldWithDefaults { - #[graphql(default = "123")] - field_one: i32, - #[graphql(default = "456", description = "The second field")] - field_two: i32, + #[graphql(default = "123")] field_one: i32, + #[graphql(default = "456", description = "The second field")] field_two: i32, } graphql_object!(Root: () |&self| { @@ -159,27 +154,59 @@ fn default_name_introspection() { assert_eq!(fields.len(), 2); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldTwo")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldTwo")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -187,9 +214,9 @@ fn default_name_introspection() { fn default_name_input_value() { let iv = InputValue::object( vec![ - ("fieldOne", InputValue::string("number one")), - ("fieldTwo", InputValue::string("number two")), - ].into_iter() + ("fieldOne", InputValue::string("number one")), + ("fieldTwo", InputValue::string("number two")), + ].into_iter() .collect(), ); @@ -225,32 +252,67 @@ fn no_trailing_comma_introspection() { "#; run_type_info_query(doc, |type_info, fields| { - assert_eq!(type_info.get("name"), Some(&Value::string("NoTrailingComma"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("NoTrailingComma")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(fields.len(), 2); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldTwo")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldTwo")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -281,23 +343,44 @@ fn derive_introspection() { assert_eq!(fields.len(), 1); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } #[test] fn derive_derived() { assert_eq!( - format!("{:?}", Derive { field_one: "test".to_owned() }), + format!( + "{:?}", + Derive { + field_one: "test".to_owned(), + } + ), "Derive { field_one: \"test\" }" ); } @@ -324,21 +407,40 @@ fn named_introspection() { "#; run_type_info_query(doc, |type_info, fields| { - assert_eq!(type_info.get("name"), Some(&Value::string("ANamedInputObject"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("ANamedInputObject")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(fields.len(), 1); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -365,20 +467,39 @@ fn description_introspection() { run_type_info_query(doc, |type_info, fields| { assert_eq!(type_info.get("name"), Some(&Value::string("Description"))); - assert_eq!(type_info.get("description"), Some(&Value::string("Description for the input object"))); + assert_eq!( + type_info.get("description"), + Some(&Value::string("Description for the input object")) + ); assert_eq!(fields.len(), 1); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::null()), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::null()), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -404,32 +525,67 @@ fn field_description_introspection() { "#; run_type_info_query(doc, |type_info, fields| { - assert_eq!(type_info.get("name"), Some(&Value::string("FieldDescription"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("FieldDescription")) + ); assert_eq!(type_info.get("description"), Some(&Value::null())); assert_eq!(fields.len(), 2); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("description", Value::string("The first field")), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ("description", Value::string("The first field")), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldTwo")), - ("description", Value::string("The second field")), - ("type", Value::object(vec![ - ("ofType", Value::object(vec![ - ("name", Value::string("String")), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldTwo")), + ("description", Value::string("The second field")), + ( + "type", + Value::object( + vec![ + ( + "ofType", + Value::object( + vec![("name", Value::string("String"))] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect() + )) + ); }); } @@ -451,24 +607,39 @@ fn field_with_defaults_introspection() { "#; run_type_info_query(doc, |type_info, fields| { - assert_eq!(type_info.get("name"), Some(&Value::string("FieldWithDefaults"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("FieldWithDefaults")) + ); assert_eq!(fields.len(), 2); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldOne")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ("defaultValue", Value::string("123")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldOne")), + ( + "type", + Value::object(vec![("name", Value::string("Int"))].into_iter().collect()), + ), + ("defaultValue", Value::string("123")), + ].into_iter() + .collect() + )) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("fieldTwo")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ("defaultValue", Value::string("456")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("fieldTwo")), + ( + "type", + Value::object(vec![("name", Value::string("Int"))].into_iter().collect()), + ), + ("defaultValue", Value::string("456")), + ].into_iter() + .collect() + )) + ); }); } diff --git a/juniper/src/executor_tests/introspection/mod.rs b/juniper/src/executor_tests/introspection/mod.rs index 3e98f181..25f6251c 100644 --- a/juniper/src/executor_tests/introspection/mod.rs +++ b/juniper/src/executor_tests/introspection/mod.rs @@ -80,11 +80,17 @@ fn test_execution() { println!("Result: {:?}", result); - assert_eq!(result, Value::object(vec![ - ("sampleEnum", Value::string("ONE")), - ("first", Value::int(123)), - ("second", Value::int(30)), - ].into_iter().collect())); + assert_eq!( + result, + Value::object( + vec![ + ("sampleEnum", Value::string("ONE")), + ("first", Value::int(123)), + ("second", Value::int(30)), + ].into_iter() + .collect() + ) + ); } #[test] @@ -141,19 +147,29 @@ fn enum_introspection() { assert_eq!(values.len(), 2); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("ONE")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("ONE")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(values.contains(&Value::object(vec![ - ("name", Value::string("TWO")), - ("description", Value::null()), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + values.contains(&Value::object( + vec![ + ("name", Value::string("TWO")), + ("description", Value::null()), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); } #[test] @@ -208,9 +224,15 @@ fn interface_introspection() { .as_object_value() .expect("__type field not an object value"); - assert_eq!(type_info.get("name"), Some(&Value::string("SampleInterface"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("SampleInterface")) + ); assert_eq!(type_info.get("kind"), Some(&Value::string("INTERFACE"))); - assert_eq!(type_info.get("description"), Some(&Value::string("A sample interface"))); + assert_eq!( + type_info.get("description"), + Some(&Value::string("A sample interface")) + ); assert_eq!(type_info.get("interfaces"), Some(&Value::null())); assert_eq!(type_info.get("enumValues"), Some(&Value::null())); assert_eq!(type_info.get("inputFields"), Some(&Value::null())); @@ -224,9 +246,9 @@ fn interface_introspection() { assert_eq!(possible_types.len(), 1); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Root")), - ].into_iter().collect()))); + assert!(possible_types.contains(&Value::object( + vec![("name", Value::string("Root"))].into_iter().collect() + ))); let fields = type_info .get("fields") @@ -236,21 +258,41 @@ fn interface_introspection() { assert_eq!(fields.len(), 1); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("sampleEnum")), - ("description", Value::string("A sample field in the interface")), - ("args", Value::list(vec![])), - ("type", Value::object(vec![ - ("name", Value::null()), - ("kind", Value::string("NON_NULL")), - ("ofType", Value::object(vec![ - ("name", Value::string("SampleEnum")), - ("kind", Value::string("ENUM")), - ].into_iter().collect())), - ].into_iter().collect())), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("sampleEnum")), + ( + "description", + Value::string("A sample field in the interface"), + ), + ("args", Value::list(vec![])), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ("kind", Value::string("NON_NULL")), + ( + "ofType", + Value::object( + vec![ + ("name", Value::string("SampleEnum")), + ("kind", Value::string("ENUM")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); } #[test] @@ -318,14 +360,20 @@ fn object_introspection() { assert_eq!(type_info.get("name"), Some(&Value::string("Root"))); assert_eq!(type_info.get("kind"), Some(&Value::string("OBJECT"))); - assert_eq!(type_info.get("description"), Some(&Value::string("The root query object in the schema"))); + assert_eq!( + type_info.get("description"), + Some(&Value::string("The root query object in the schema")) + ); assert_eq!( type_info.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("SampleInterface")), - ].into_iter().collect()), - ]))); + Value::object( + vec![("name", Value::string("SampleInterface"))] + .into_iter() + .collect(), + ), + ])) + ); assert_eq!(type_info.get("enumValues"), Some(&Value::null())); assert_eq!(type_info.get("inputFields"), Some(&Value::null())); assert_eq!(type_info.get("ofType"), Some(&Value::null())); @@ -341,62 +389,126 @@ fn object_introspection() { println!("Fields: {:#?}", fields); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("sampleEnum")), - ("description", Value::null()), - ("args", Value::list(vec![])), - ("type", Value::object(vec![ - ("name", Value::null()), - ("kind", Value::string("NON_NULL")), - ("ofType", Value::object(vec![ - ("name", Value::string("SampleEnum")), - ("kind", Value::string("ENUM")), - ].into_iter().collect())), - ].into_iter().collect())), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("sampleEnum")), + ("description", Value::null()), + ("args", Value::list(vec![])), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ("kind", Value::string("NON_NULL")), + ( + "ofType", + Value::object( + vec![ + ("name", Value::string("SampleEnum")), + ("kind", Value::string("ENUM")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("sampleScalar")), - ("description", Value::string("A sample scalar field on the object")), - ("args", Value::list(vec![ - Value::object(vec![ - ("name", Value::string("first")), - ("description", Value::string("The first number")), - ("type", Value::object(vec![ - ("name", Value::null()), - ("kind", Value::string("NON_NULL")), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ("kind", Value::string("SCALAR")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect())), - ("defaultValue", Value::null()), - ].into_iter().collect()), - Value::object(vec![ - ("name", Value::string("second")), - ("description", Value::string("The second number")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("kind", Value::string("SCALAR")), - ("ofType", Value::null()), - ].into_iter().collect())), - ("defaultValue", Value::string("123")), - ].into_iter().collect()), - ])), - ("type", Value::object(vec![ - ("name", Value::null()), - ("kind", Value::string("NON_NULL")), - ("ofType", Value::object(vec![ - ("name", Value::string("SampleScalar")), - ("kind", Value::string("SCALAR")), - ].into_iter().collect())), - ].into_iter().collect())), - ("isDeprecated", Value::boolean(false)), - ("deprecationReason", Value::null()), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![ + ("name", Value::string("sampleScalar")), + ( + "description", + Value::string("A sample scalar field on the object"), + ), + ( + "args", + Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("first")), + ("description", Value::string("The first number")), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ("kind", Value::string("NON_NULL")), + ( + "ofType", + Value::object( + vec![ + ("name", Value::string("Int")), + ("kind", Value::string("SCALAR")), + ("ofType", Value::null()), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::null()), + ].into_iter() + .collect(), + ), + Value::object( + vec![ + ("name", Value::string("second")), + ("description", Value::string("The second number")), + ( + "type", + Value::object( + vec![ + ("name", Value::string("Int")), + ("kind", Value::string("SCALAR")), + ("ofType", Value::null()), + ].into_iter() + .collect(), + ), + ), + ("defaultValue", Value::string("123")), + ].into_iter() + .collect(), + ), + ]), + ), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ("kind", Value::string("NON_NULL")), + ( + "ofType", + Value::object( + vec![ + ("name", Value::string("SampleScalar")), + ("kind", Value::string("SCALAR")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ("isDeprecated", Value::boolean(false)), + ("deprecationReason", Value::null()), + ].into_iter() + .collect() + )) + ); } #[test] @@ -431,15 +543,21 @@ fn scalar_introspection() { .get("__type") .expect("__type field missing"); - assert_eq!(type_info, &Value::object(vec![ - ("name", Value::string("SampleScalar")), - ("kind", Value::string("SCALAR")), - ("description", Value::null()), - ("fields", Value::null()), - ("interfaces", Value::null()), - ("possibleTypes", Value::null()), - ("enumValues", Value::null()), - ("inputFields", Value::null()), - ("ofType", Value::null()), - ].into_iter().collect())); + assert_eq!( + type_info, + &Value::object( + vec![ + ("name", Value::string("SampleScalar")), + ("kind", Value::string("SCALAR")), + ("description", Value::null()), + ("fields", Value::null()), + ("interfaces", Value::null()), + ("possibleTypes", Value::null()), + ("enumValues", Value::null()), + ("inputFields", Value::null()), + ("ofType", Value::null()), + ].into_iter() + .collect() + ) + ); } diff --git a/juniper/src/executor_tests/variables.rs b/juniper/src/executor_tests/variables.rs index bbbad525..d22e10d2 100644 --- a/juniper/src/executor_tests/variables.rs +++ b/juniper/src/executor_tests/variables.rs @@ -56,8 +56,7 @@ struct ExampleInputObject { #[derive(GraphQLInputObject, Debug)] #[graphql(_internal)] struct InputWithDefaults { - #[graphql(default = "123")] - a: i32, + #[graphql(default = "123")] a: i32, } graphql_object!(TestType: () |&self| { @@ -146,7 +145,8 @@ fn inline_complex_input() { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: Some("foo"), b: Some([Some("bar")]), c: "baz", d: None })"#))); - }); + }, + ); } #[test] @@ -157,7 +157,8 @@ fn inline_parse_single_value_to_list() { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: Some("foo"), b: Some([Some("bar")]), c: "baz", d: None })"#))); - }); + }, + ); } #[test] @@ -168,7 +169,8 @@ fn inline_runs_from_input_value_on_scalar() { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: None, b: None, c: "baz", d: Some(TestComplexScalar) })"#))); - }); + }, + ); } #[test] @@ -176,17 +178,25 @@ fn variable_complex_input() { run_variable_query( r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#, vec![ - ("input".to_owned(), InputValue::object(vec![ - ("a", InputValue::string("foo")), - ("b", InputValue::list(vec![InputValue::string("bar")])), - ("c", InputValue::string("baz")), - ].into_iter().collect())), - ].into_iter().collect(), + ( + "input".to_owned(), + InputValue::object( + vec![ + ("a", InputValue::string("foo")), + ("b", InputValue::list(vec![InputValue::string("bar")])), + ("c", InputValue::string("baz")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: Some("foo"), b: Some([Some("bar")]), c: "baz", d: None })"#))); - }); + }, + ); } #[test] @@ -194,17 +204,25 @@ fn variable_parse_single_value_to_list() { run_variable_query( r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#, vec![ - ("input".to_owned(), InputValue::object(vec![ - ("a", InputValue::string("foo")), - ("b", InputValue::string("bar")), - ("c", InputValue::string("baz")), - ].into_iter().collect())), - ].into_iter().collect(), + ( + "input".to_owned(), + InputValue::object( + vec![ + ("a", InputValue::string("foo")), + ("b", InputValue::string("bar")), + ("c", InputValue::string("baz")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: Some("foo"), b: Some([Some("bar")]), c: "baz", d: None })"#))); - }); + }, + ); } #[test] @@ -212,16 +230,24 @@ fn variable_runs_from_input_value_on_scalar() { run_variable_query( r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#, vec![ - ("input".to_owned(), InputValue::object(vec![ - ("c", InputValue::string("baz")), - ("d", InputValue::string("SerializedValue")), - ].into_iter().collect())), - ].into_iter().collect(), + ( + "input".to_owned(), + InputValue::object( + vec![ + ("c", InputValue::string("baz")), + ("d", InputValue::string("SerializedValue")), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithObjectInput"), Some(&Value::string(r#"Some(TestInputObject { a: None, b: None, c: "baz", d: Some(TestComplexScalar) })"#))); - }); + }, + ); } #[test] @@ -230,22 +256,31 @@ fn variable_error_on_nested_non_null() { let query = r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::object(vec![ - ("a", InputValue::string("foo")), - ("b", InputValue::string("bar")), - ("c", InputValue::null()), - ].into_iter().collect())) + ( + "input".to_owned(), + InputValue::object( + vec![ + ("a", InputValue::string("foo")), + ("b", InputValue::string("bar")), + ("c", InputValue::null()), + ].into_iter() + .collect(), + ), + ), ].into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ + assert_eq!( + error, + ValidationError(vec![ RuleError::new( r#"Variable "$input" got invalid value. In field "c": Expected "String!", found null."#, &[SourcePosition::new(8, 0, 8)], ), - ])); + ]) + ); } #[test] @@ -253,9 +288,8 @@ fn variable_error_on_incorrect_type() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#; - let vars = vec![ - ("input".to_owned(), InputValue::string("foo bar")), - ].into_iter() + let vars = vec![("input".to_owned(), InputValue::string("foo bar"))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); @@ -274,21 +308,30 @@ fn variable_error_on_omit_non_null() { let query = r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::object(vec![ - ("a", InputValue::string("foo")), - ("b", InputValue::string("bar")), - ].into_iter().collect())) + ( + "input".to_owned(), + InputValue::object( + vec![ + ("a", InputValue::string("foo")), + ("b", InputValue::string("bar")), + ].into_iter() + .collect(), + ), + ), ].into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ + assert_eq!( + error, + ValidationError(vec![ RuleError::new( r#"Variable "$input" got invalid value. In field "c": Expected "String!", found null."#, &[SourcePosition::new(8, 0, 8)], ), - ])); + ]) + ); } #[test] @@ -298,11 +341,20 @@ fn variable_multiple_errors_with_nesting() { let query = r#"query q($input: TestNestedInputObject) { fieldWithNestedObjectInput(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::object(vec![ - ("na", InputValue::object(vec![ - ("a", InputValue::string("foo")), - ].into_iter().collect())), - ].into_iter().collect())) + ( + "input".to_owned(), + InputValue::object( + vec![ + ( + "na", + InputValue::object( + vec![("a", InputValue::string("foo"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), ].into_iter() .collect(); @@ -326,42 +378,55 @@ fn variable_error_on_additional_field() { let query = r#"query q($input: TestInputObject) { fieldWithObjectInput(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::object(vec![ - ("a", InputValue::string("foo")), - ("b", InputValue::string("bar")), - ("c", InputValue::string("baz")), - ("extra", InputValue::string("dog")), - ].into_iter().collect())) + ( + "input".to_owned(), + InputValue::object( + vec![ + ("a", InputValue::string("foo")), + ("b", InputValue::string("bar")), + ("c", InputValue::string("baz")), + ("extra", InputValue::string("dog")), + ].into_iter() + .collect(), + ), + ), ].into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$input" got invalid value. In field "extra": Unknown field."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$input" got invalid value. In field "extra": Unknown field."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] fn allow_nullable_inputs_to_be_omitted() { run_query(r#"{ fieldWithNullableStringInput }"#, |result| { assert_eq!( - result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"None"#))); + result.get("fieldWithNullableStringInput"), + Some(&Value::string(r#"None"#)) + ); }); } #[test] fn allow_nullable_inputs_to_be_omitted_in_variable() { - run_query(r#"query q($value: String) { fieldWithNullableStringInput(input: $value) }"#, - |result| { - assert_eq!( + run_query( + r#"query q($value: String) { fieldWithNullableStringInput(input: $value) }"#, + |result| { + assert_eq!( result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"None"#))); - }); + Some(&Value::string(r#"None"#)) + ); + }, + ); } #[test] @@ -371,7 +436,8 @@ fn allow_nullable_inputs_to_be_explicitly_null() { |result| { assert_eq!( result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"None"#))); + Some(&Value::string(r#"None"#)) + ); }, ); } @@ -380,28 +446,32 @@ fn allow_nullable_inputs_to_be_explicitly_null() { fn allow_nullable_inputs_to_be_set_to_null_in_variable() { run_variable_query( r#"query q($value: String) { fieldWithNullableStringInput(input: $value) }"#, - vec![ - ("value".to_owned(), InputValue::null()), - ].into_iter().collect(), + vec![("value".to_owned(), InputValue::null())] + .into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"None"#))); - }); + Some(&Value::string(r#"None"#)) + ); + }, + ); } #[test] fn allow_nullable_inputs_to_be_set_to_value_in_variable() { run_variable_query( r#"query q($value: String) { fieldWithNullableStringInput(input: $value) }"#, - vec![ - ("value".to_owned(), InputValue::string("a")), - ].into_iter().collect(), + vec![("value".to_owned(), InputValue::string("a"))] + .into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"Some("a")"#))); - }); + Some(&Value::string(r#"Some("a")"#)) + ); + }, + ); } #[test] @@ -411,7 +481,8 @@ fn allow_nullable_inputs_to_be_set_to_value_directly() { |result| { assert_eq!( result.get("fieldWithNullableStringInput"), - Some(&Value::string(r#"Some("a")"#))); + Some(&Value::string(r#"Some("a")"#)) + ); }, ); } @@ -425,12 +496,15 @@ fn does_not_allow_non_nullable_input_to_be_omitted_in_variable() { let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$value" of required type "String!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$value" of required type "String!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] @@ -438,33 +512,37 @@ fn does_not_allow_non_nullable_input_to_be_set_to_null_in_variable() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($value: String!) { fieldWithNonNullableStringInput(input: $value) }"#; - let vars = vec![ - ("value".to_owned(), InputValue::null()), - ].into_iter() + let vars = vec![("value".to_owned(), InputValue::null())] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$value" of required type "String!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$value" of required type "String!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] fn allow_non_nullable_inputs_to_be_set_to_value_in_variable() { run_variable_query( r#"query q($value: String!) { fieldWithNonNullableStringInput(input: $value) }"#, - vec![ - ("value".to_owned(), InputValue::string("a")), - ].into_iter().collect(), + vec![("value".to_owned(), InputValue::string("a"))] + .into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithNonNullableStringInput"), - Some(&Value::string(r#""a""#))); - }); + Some(&Value::string(r#""a""#)) + ); + }, + ); } #[test] @@ -474,7 +552,8 @@ fn allow_non_nullable_inputs_to_be_set_to_value_directly() { |result| { assert_eq!( result.get("fieldWithNonNullableStringInput"), - Some(&Value::string(r#""a""#))); + Some(&Value::string(r#""a""#)) + ); }, ); } @@ -483,14 +562,11 @@ fn allow_non_nullable_inputs_to_be_set_to_value_directly() { fn allow_lists_to_be_null() { run_variable_query( r#"query q($input: [String]) { list(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::null()), - ].into_iter() + vec![("input".to_owned(), InputValue::null())] + .into_iter() .collect(), |result| { - assert_eq!( - result.get("list"), - Some(&Value::string(r#"None"#))); + assert_eq!(result.get("list"), Some(&Value::string(r#"None"#))); }, ); } @@ -500,15 +576,17 @@ fn allow_lists_to_contain_values() { run_variable_query( r#"query q($input: [String]) { list(input: $input) }"#, vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - ])), + ( + "input".to_owned(), + InputValue::list(vec![InputValue::string("A")]), + ), ].into_iter() .collect(), |result| { assert_eq!( result.get("list"), - Some(&Value::string(r#"Some([Some("A")])"#))); + Some(&Value::string(r#"Some([Some("A")])"#)) + ); }, ); } @@ -518,17 +596,21 @@ fn allow_lists_to_contain_null() { run_variable_query( r#"query q($input: [String]) { list(input: $input) }"#, vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::null(), - InputValue::string("B"), - ])), + ( + "input".to_owned(), + InputValue::list(vec![ + InputValue::string("A"), + InputValue::null(), + InputValue::string("B"), + ]), + ), ].into_iter() .collect(), |result| { assert_eq!( result.get("list"), - Some(&Value::string(r#"Some([Some("A"), None, Some("B")])"#))); + Some(&Value::string(r#"Some([Some("A"), None, Some("B")])"#)) + ); }, ); } @@ -538,86 +620,91 @@ fn does_not_allow_non_null_lists_to_be_null() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($input: [String]!) { nnList(input: $input) }"#; - let vars = vec![ - ("input".to_owned(), InputValue::null()), - ].into_iter() + let vars = vec![("input".to_owned(), InputValue::null())] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$input" of required type "[String]!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$input" of required type "[String]!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] fn allow_non_null_lists_to_contain_values() { - run_variable_query(r#"query q($input: [String]!) { nnList(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - ])), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( - result.get("nnList"), - Some(&Value::string(r#"[Some("A")]"#))); - }); + run_variable_query( + r#"query q($input: [String]!) { nnList(input: $input) }"#, + vec![ + ( + "input".to_owned(), + InputValue::list(vec![InputValue::string("A")]), + ), + ].into_iter() + .collect(), + |result| { + assert_eq!(result.get("nnList"), Some(&Value::string(r#"[Some("A")]"#))); + }, + ); } #[test] fn allow_non_null_lists_to_contain_null() { - run_variable_query(r#"query q($input: [String]!) { nnList(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::null(), - InputValue::string("B"), - ])), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($input: [String]!) { nnList(input: $input) }"#, + vec![ + ( + "input".to_owned(), + InputValue::list(vec![ + InputValue::string("A"), + InputValue::null(), + InputValue::string("B"), + ]), + ), + ].into_iter() + .collect(), + |result| { + assert_eq!( result.get("nnList"), - Some(&Value::string(r#"[Some("A"), None, Some("B")]"#))); - }); + Some(&Value::string(r#"[Some("A"), None, Some("B")]"#)) + ); + }, + ); } #[test] fn allow_lists_of_non_null_to_be_null() { - run_variable_query(r#"query q($input: [String!]) { listNn(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::null()), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( - result.get("listNn"), - Some(&Value::string(r#"None"#))); - }); + run_variable_query( + r#"query q($input: [String!]) { listNn(input: $input) }"#, + vec![("input".to_owned(), InputValue::null())] + .into_iter() + .collect(), + |result| { + assert_eq!(result.get("listNn"), Some(&Value::string(r#"None"#))); + }, + ); } #[test] fn allow_lists_of_non_null_to_contain_values() { - run_variable_query(r#"query q($input: [String!]) { listNn(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - ])), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( - result.get("listNn"), - Some(&Value::string(r#"Some(["A"])"#))); - }); + run_variable_query( + r#"query q($input: [String!]) { listNn(input: $input) }"#, + vec![ + ( + "input".to_owned(), + InputValue::list(vec![InputValue::string("A")]), + ), + ].into_iter() + .collect(), + |result| { + assert_eq!(result.get("listNn"), Some(&Value::string(r#"Some(["A"])"#))); + }, + ); } #[test] @@ -626,11 +713,14 @@ fn does_not_allow_lists_of_non_null_to_contain_null() { let query = r#"query q($input: [String!]) { listNn(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::null(), - InputValue::string("B"), - ])), + ( + "input".to_owned(), + InputValue::list(vec![ + InputValue::string("A"), + InputValue::null(), + InputValue::string("B"), + ]), + ), ].into_iter() .collect(); @@ -650,11 +740,14 @@ fn does_not_allow_non_null_lists_of_non_null_to_contain_null() { let query = r#"query q($input: [String!]!) { nnListNn(input: $input) }"#; let vars = vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::null(), - InputValue::string("B"), - ])), + ( + "input".to_owned(), + InputValue::list(vec![ + InputValue::string("A"), + InputValue::null(), + InputValue::string("B"), + ]), + ), ].into_iter() .collect(); @@ -673,36 +766,38 @@ fn does_not_allow_non_null_lists_of_non_null_to_be_null() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($input: [String!]!) { nnListNn(input: $input) }"#; - let vars = vec![ - ("value".to_owned(), InputValue::null()), - ].into_iter() + let vars = vec![("value".to_owned(), InputValue::null())] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$input" of required type "[String!]!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$input" of required type "[String!]!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] fn allow_non_null_lists_of_non_null_to_contain_values() { - run_variable_query(r#"query q($input: [String!]!) { nnListNn(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - ])), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( - result.get("nnListNn"), - Some(&Value::string(r#"["A"]"#))); - }); + run_variable_query( + r#"query q($input: [String!]!) { nnListNn(input: $input) }"#, + vec![ + ( + "input".to_owned(), + InputValue::list(vec![InputValue::string("A")]), + ), + ].into_iter() + .collect(), + |result| { + assert_eq!(result.get("nnListNn"), Some(&Value::string(r#"["A"]"#))); + }, + ); } #[test] @@ -711,10 +806,10 @@ fn does_not_allow_invalid_types_to_be_used_as_values() { let query = r#"query q($input: TestType!) { fieldWithObjectInput(input: $input) }"#; let vars = vec![ - ("value".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::string("B"), - ])), + ( + "value".to_owned(), + InputValue::list(vec![InputValue::string("A"), InputValue::string("B")]), + ), ].into_iter() .collect(); @@ -734,10 +829,10 @@ fn does_not_allow_unknown_types_to_be_used_as_values() { let query = r#"query q($input: UnknownType!) { fieldWithObjectInput(input: $input) }"#; let vars = vec![ - ("value".to_owned(), InputValue::list(vec![ - InputValue::string("A"), - InputValue::string("B"), - ])), + ( + "value".to_owned(), + InputValue::list(vec![InputValue::string("A"), InputValue::string("B")]), + ), ].into_iter() .collect(); @@ -755,83 +850,96 @@ fn does_not_allow_unknown_types_to_be_used_as_values() { fn default_argument_when_not_provided() { run_query(r#"{ fieldWithDefaultArgumentValue }"#, |result| { assert_eq!( - result.get("fieldWithDefaultArgumentValue"), - Some(&Value::string(r#""Hello World""#))); + result.get("fieldWithDefaultArgumentValue"), + Some(&Value::string(r#""Hello World""#)) + ); }); } #[test] fn default_argument_when_nullable_variable_not_provided() { - run_query(r#"query q($input: String) { fieldWithDefaultArgumentValue(input: $input) }"#, - |result| { - assert_eq!( + run_query( + r#"query q($input: String) { fieldWithDefaultArgumentValue(input: $input) }"#, + |result| { + assert_eq!( result.get("fieldWithDefaultArgumentValue"), - Some(&Value::string(r#""Hello World""#))); - }); + Some(&Value::string(r#""Hello World""#)) + ); + }, + ); } #[test] fn default_argument_when_nullable_variable_set_to_null() { run_variable_query( r#"query q($input: String) { fieldWithDefaultArgumentValue(input: $input) }"#, - vec![ - ("input".to_owned(), InputValue::null()), - ].into_iter().collect(), + vec![("input".to_owned(), InputValue::null())] + .into_iter() + .collect(), |result| { assert_eq!( result.get("fieldWithDefaultArgumentValue"), - Some(&Value::string(r#""Hello World""#))); - }); + Some(&Value::string(r#""Hello World""#)) + ); + }, + ); } #[test] fn nullable_input_object_arguments_successful_without_variables() { run_query(r#"{ exampleInput(arg: {a: "abc", b: 123}) }"#, |result| { assert_eq!( - result.get("exampleInput"), - Some(&Value::string(r#"a: Some("abc"), b: 123"#))); + result.get("exampleInput"), + Some(&Value::string(r#"a: Some("abc"), b: 123"#)) + ); }); run_query(r#"{ exampleInput(arg: {a: null, b: 1}) }"#, |result| { assert_eq!( - result.get("exampleInput"), - Some(&Value::string(r#"a: None, b: 1"#))); + result.get("exampleInput"), + Some(&Value::string(r#"a: None, b: 1"#)) + ); }); } #[test] fn nullable_input_object_arguments_successful_with_variables() { - run_variable_query(r#"query q($var: Int!) { exampleInput(arg: {b: $var}) }"#, - vec![ - ("var".to_owned(), InputValue::int(123)), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: Int!) { exampleInput(arg: {b: $var}) }"#, + vec![("var".to_owned(), InputValue::int(123))] + .into_iter() + .collect(), + |result| { + assert_eq!( result.get("exampleInput"), - Some(&Value::string(r#"a: None, b: 123"#))); - }); + Some(&Value::string(r#"a: None, b: 123"#)) + ); + }, + ); - run_variable_query(r#"query q($var: String) { exampleInput(arg: {a: $var, b: 1}) }"#, - vec![ - ("var".to_owned(), InputValue::null()), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: String) { exampleInput(arg: {a: $var, b: 1}) }"#, + vec![("var".to_owned(), InputValue::null())] + .into_iter() + .collect(), + |result| { + assert_eq!( result.get("exampleInput"), - Some(&Value::string(r#"a: None, b: 1"#))); - }); + Some(&Value::string(r#"a: None, b: 1"#)) + ); + }, + ); - run_variable_query(r#"query q($var: String) { exampleInput(arg: {a: $var, b: 1}) }"#, - vec![].into_iter().collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: String) { exampleInput(arg: {a: $var, b: 1}) }"#, + vec![].into_iter().collect(), + |result| { + assert_eq!( result.get("exampleInput"), - Some(&Value::string(r#"a: None, b: 1"#))); - }); + Some(&Value::string(r#"a: None, b: 1"#)) + ); + }, + ); } #[test] @@ -843,12 +951,15 @@ fn does_not_allow_missing_required_field() { let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Invalid value for argument "arg", expected type "ExampleInputObject!""#, - &[SourcePosition::new(20, 0, 20)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Invalid value for argument "arg", expected type "ExampleInputObject!""#, + &[SourcePosition::new(20, 0, 20)], + ), + ]) + ); } #[test] @@ -860,12 +971,15 @@ fn does_not_allow_null_in_required_field() { let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Invalid value for argument "arg", expected type "ExampleInputObject!""#, - &[SourcePosition::new(20, 0, 20)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Invalid value for argument "arg", expected type "ExampleInputObject!""#, + &[SourcePosition::new(20, 0, 20)], + ), + ]) + ); } #[test] @@ -877,12 +991,15 @@ fn does_not_allow_missing_variable_for_required_field() { let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$var" of required type "Int!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$var" of required type "Int!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] @@ -890,63 +1007,70 @@ fn does_not_allow_null_variable_for_required_field() { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($var: Int!) { exampleInput(arg: {b: $var}) }"#; - let vars = vec![ - ("var".to_owned(), InputValue::null()), - ].into_iter() + let vars = vec![("var".to_owned(), InputValue::null())] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$var" of required type "Int!" was not provided."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$var" of required type "Int!" was not provided."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] fn input_object_with_default_values() { run_query(r#"{ inputWithDefaults(arg: {a: 1}) }"#, |result| { assert_eq!( - result.get("inputWithDefaults"), - Some(&Value::string(r#"a: 1"#))); + result.get("inputWithDefaults"), + Some(&Value::string(r#"a: 1"#)) + ); }); - run_variable_query(r#"query q($var: Int!) { inputWithDefaults(arg: {a: $var}) }"#, - vec![ - ("var".to_owned(), InputValue::int(1)), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: Int!) { inputWithDefaults(arg: {a: $var}) }"#, + vec![("var".to_owned(), InputValue::int(1))] + .into_iter() + .collect(), + |result| { + assert_eq!( result.get("inputWithDefaults"), - Some(&Value::string(r#"a: 1"#))); - }); + Some(&Value::string(r#"a: 1"#)) + ); + }, + ); - run_variable_query(r#"query q($var: Int = 1) { inputWithDefaults(arg: {a: $var}) }"#, - vec![].into_iter().collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: Int = 1) { inputWithDefaults(arg: {a: $var}) }"#, + vec![].into_iter().collect(), + |result| { + assert_eq!( result.get("inputWithDefaults"), - Some(&Value::string(r#"a: 1"#))); - }); + Some(&Value::string(r#"a: 1"#)) + ); + }, + ); - run_variable_query(r#"query q($var: Int = 1) { inputWithDefaults(arg: {a: $var}) }"#, - vec![ - ("var".to_owned(), InputValue::int(2)), - ] - .into_iter() - .collect(), - |result| { - assert_eq!( + run_variable_query( + r#"query q($var: Int = 1) { inputWithDefaults(arg: {a: $var}) }"#, + vec![("var".to_owned(), InputValue::int(2))] + .into_iter() + .collect(), + |result| { + assert_eq!( result.get("inputWithDefaults"), - Some(&Value::string(r#"a: 2"#))); - }); + Some(&Value::string(r#"a: 2"#)) + ); + }, + ); } - mod integers { use super::*; @@ -954,27 +1078,27 @@ mod integers { fn positive_and_negative_should_work() { run_variable_query( r#"query q($var: Int!) { integerInput(value: $var) }"#, - vec![ - ("var".to_owned(), InputValue::int(1)), - ].into_iter() + vec![("var".to_owned(), InputValue::int(1))] + .into_iter() .collect(), |result| { assert_eq!( result.get("integerInput"), - Some(&Value::string(r#"value: 1"#))); + Some(&Value::string(r#"value: 1"#)) + ); }, ); run_variable_query( r#"query q($var: Int!) { integerInput(value: $var) }"#, - vec![ - ("var".to_owned(), InputValue::int(-1)), - ].into_iter() + vec![("var".to_owned(), InputValue::int(-1))] + .into_iter() .collect(), |result| { assert_eq!( result.get("integerInput"), - Some(&Value::string(r#"value: -1"#))); + Some(&Value::string(r#"value: -1"#)) + ); }, ); } @@ -984,19 +1108,21 @@ mod integers { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($var: Int!) { integerInput(value: $var) }"#; - let vars = vec![ - ("var".to_owned(), InputValue::float(10.0)), - ].into_iter() + let vars = vec![("var".to_owned(), InputValue::float(10.0))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$var" got invalid value. Expected "Int"."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$var" got invalid value. Expected "Int"."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } #[test] @@ -1004,23 +1130,24 @@ mod integers { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($var: Int!) { integerInput(value: $var) }"#; - let vars = vec![ - ("var".to_owned(), InputValue::string("10")), - ].into_iter() + let vars = vec![("var".to_owned(), InputValue::string("10"))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$var" got invalid value. Expected "Int"."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$var" got invalid value. Expected "Int"."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } } - mod floats { use super::*; @@ -1028,14 +1155,14 @@ mod floats { fn float_values_should_work() { run_variable_query( r#"query q($var: Float!) { floatInput(value: $var) }"#, - vec![ - ("var".to_owned(), InputValue::float(10.0)), - ].into_iter() + vec![("var".to_owned(), InputValue::float(10.0))] + .into_iter() .collect(), |result| { assert_eq!( result.get("floatInput"), - Some(&Value::string(r#"value: 10"#))); + Some(&Value::string(r#"value: 10"#)) + ); }, ); } @@ -1044,14 +1171,14 @@ mod floats { fn coercion_from_integers_should_work() { run_variable_query( r#"query q($var: Float!) { floatInput(value: $var) }"#, - vec![ - ("var".to_owned(), InputValue::int(-1)), - ].into_iter() + vec![("var".to_owned(), InputValue::int(-1))] + .into_iter() .collect(), |result| { assert_eq!( result.get("floatInput"), - Some(&Value::string(r#"value: -1"#))); + Some(&Value::string(r#"value: -1"#)) + ); }, ); } @@ -1061,18 +1188,20 @@ mod floats { let schema = RootNode::new(TestType, EmptyMutation::<()>::new()); let query = r#"query q($var: Float!) { floatInput(value: $var) }"#; - let vars = vec![ - ("var".to_owned(), InputValue::string("10")), - ].into_iter() + let vars = vec![("var".to_owned(), InputValue::string("10"))] + .into_iter() .collect(); let error = ::execute(query, None, &schema, &vars, &()).unwrap_err(); - assert_eq!(error, ValidationError(vec![ - RuleError::new( - r#"Variable "$var" got invalid value. Expected "Float"."#, - &[SourcePosition::new(8, 0, 8)], - ), - ])); + assert_eq!( + error, + ValidationError(vec![ + RuleError::new( + r#"Variable "$var" got invalid value. Expected "Float"."#, + &[SourcePosition::new(8, 0, 8)], + ), + ]) + ); } } diff --git a/juniper/src/http/graphiql.rs b/juniper/src/http/graphiql.rs index 09a49b07..d3255138 100644 --- a/juniper/src/http/graphiql.rs +++ b/juniper/src/http/graphiql.rs @@ -62,5 +62,4 @@ pub fn graphiql_source(graphql_endpoint_url: &str) -> String { graphql_url = graphql_endpoint_url, stylesheet_source = stylesheet_source, fetcher_source = fetcher_source) - } diff --git a/juniper/src/http/mod.rs b/juniper/src/http/mod.rs index 10640765..03ad2d22 100644 --- a/juniper/src/http/mod.rs +++ b/juniper/src/http/mod.rs @@ -19,8 +19,7 @@ use executor::ExecutionError; #[derive(Deserialize, Clone, Serialize, PartialEq, Debug)] pub struct GraphQLRequest { query: String, - #[serde(rename = "operationName")] - operation_name: Option<String>, + #[serde(rename = "operationName")] operation_name: Option<String>, variables: Option<InputValue>, } diff --git a/juniper/src/integrations/chrono.rs b/juniper/src/integrations/chrono.rs index c02b84b9..43ebf6fe 100644 --- a/juniper/src/integrations/chrono.rs +++ b/juniper/src/integrations/chrono.rs @@ -15,7 +15,7 @@ */ use chrono::prelude::*; -use ::Value; +use Value; #[doc(hidden)] pub static RFC3339_FORMAT: &'static str = "%Y-%m-%dT%H:%M:%S%.f%:z"; @@ -113,7 +113,9 @@ mod test { let input = ::InputValue::String(raw.to_string()); let parsed: DateTime<Utc> = ::FromInputValue::from_input_value(&input).unwrap(); - let expected = DateTime::parse_from_rfc3339(raw).unwrap().with_timezone(&Utc); + let expected = DateTime::parse_from_rfc3339(raw) + .unwrap() + .with_timezone(&Utc); assert_eq!(parsed, expected); } diff --git a/juniper/src/integrations/serde.rs b/juniper/src/integrations/serde.rs index 9d3103b1..4ffd5b60 100644 --- a/juniper/src/integrations/serde.rs +++ b/juniper/src/integrations/serde.rs @@ -47,9 +47,8 @@ impl<'a> ser::Serialize for GraphQLError<'a> { GraphQLError::NoOperationProvided => { serializer.serialize_str("Must provide an operation") } - GraphQLError::MultipleOperationsProvided => serializer.serialize_str( - "Must provide operation name if query contains multiple operations", - ), + GraphQLError::MultipleOperationsProvided => serializer + .serialize_str("Must provide operation name if query contains multiple operations"), GraphQLError::UnknownOperationName => serializer.serialize_str("Unknown operation"), } } diff --git a/juniper/src/integrations/url.rs b/juniper/src/integrations/url.rs index ed30defd..75bdd571 100644 --- a/juniper/src/integrations/url.rs +++ b/juniper/src/integrations/url.rs @@ -1,6 +1,6 @@ use url::Url; -use ::Value; +use Value; graphql_scalar!(Url { description: "Url" diff --git a/juniper/src/integrations/uuid.rs b/juniper/src/integrations/uuid.rs index ef6fa9e3..91886007 100644 --- a/juniper/src/integrations/uuid.rs +++ b/juniper/src/integrations/uuid.rs @@ -1,6 +1,6 @@ use uuid::Uuid; -use ::Value; +use Value; graphql_scalar!(Uuid { description: "Uuid" @@ -29,4 +29,4 @@ mod test { assert_eq!(parsed, id); } -} \ No newline at end of file +} diff --git a/juniper/src/lib.rs b/juniper/src/lib.rs index a08b9375..564ec5d3 100644 --- a/juniper/src/lib.rs +++ b/juniper/src/lib.rs @@ -212,5 +212,3 @@ impl<'a> From<Spanning<ParseError<'a>>> for GraphQLError<'a> { GraphQLError::ParseError(f) } } - - diff --git a/juniper/src/macros/field.rs b/juniper/src/macros/field.rs index 707677bd..079addf8 100644 --- a/juniper/src/macros/field.rs +++ b/juniper/src/macros/field.rs @@ -5,7 +5,12 @@ macro_rules! __graphql__build_field_matches { ( $resolveargs:tt, ( $( $acc:tt )* ), - field deprecated $_reason:tt $name:ident $args:tt -> $t:ty as $desc:tt $body:block $( $rest:tt )* + field deprecated $_reason:tt + $name:ident + $args:tt -> $t:ty + as $desc:tt + $body:block + $( $rest:tt )* ) => { __graphql__build_field_matches!( $resolveargs, @@ -28,7 +33,12 @@ macro_rules! __graphql__build_field_matches { // field <name>(...) -> <type> as <description> { ... } ( $resolveargs:tt, - ( $( $acc:tt )* ), field $name:ident $args:tt -> $t:ty as $desc:tt $body:block $( $rest:tt )* + ( $( $acc:tt )* ), + field $name:ident + $args:tt -> $t:ty + as $desc:tt + $body:block + $( $rest:tt )* ) => { __graphql__build_field_matches!( $resolveargs, @@ -55,7 +65,10 @@ macro_rules! __graphql__build_field_matches { __graphql__build_field_matches!($resolveargs, $acc, $( $rest )*); }; - ( $resolveargs:tt, $acc:tt, instance_resolvers : | $execvar:pat | $resolvers:tt $( $rest:tt )*) => { + ( $resolveargs:tt, + $acc:tt, + instance_resolvers : | $execvar:pat | $resolvers:tt $( $rest:tt )* + ) => { __graphql__build_field_matches!($resolveargs, $acc, $( $rest )*); }; @@ -79,7 +92,8 @@ macro_rules! __graphql__build_field_matches { return ($crate::IntoResolvable::into(result, $executorvar.context())).and_then( |res| match res { - Some((ctx, r)) => $executorvar.replaced_context(ctx).resolve_with_ctx(&(), &r), + Some((ctx, r)) => + $executorvar.replaced_context(ctx).resolve_with_ctx(&(), &r), None => Ok($crate::Value::null()), }) } diff --git a/juniper/src/macros/interface.rs b/juniper/src/macros/interface.rs index 61c9bda6..6c23336b 100644 --- a/juniper/src/macros/interface.rs +++ b/juniper/src/macros/interface.rs @@ -94,7 +94,11 @@ macro_rules! graphql_interface { ( @ gather_meta, ($reg:expr, $acc:expr, $info:expr, $descr:expr), - field deprecated $reason:tt $name:ident $args:tt -> $t:ty as $desc:tt $body:block $( $rest:tt )* + field deprecated $reason:tt + $name:ident + $args:tt -> $t:ty as $desc:tt + $body:block + $( $rest:tt )* ) => { $acc.push(__graphql__args!( @apply_args, @@ -177,7 +181,8 @@ macro_rules! graphql_interface { ( @ gather_meta, ($reg:expr, $acc:expr, $info:expr, $descr:expr), - instance_resolvers : | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers : | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { $( let _ = $reg.get_type::<$srctype>(&()); @@ -190,7 +195,8 @@ macro_rules! graphql_interface { ( @ concrete_type_name, ($outname:tt, $ctxtarg:ident, $ctxttype:ty), - instance_resolvers : | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers : | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { let $ctxtvar = &$ctxtarg; @@ -207,7 +213,8 @@ macro_rules! graphql_interface { ( @ resolve_into_type, ($outname:tt, $typenamearg:ident, $execarg:ident, $ctxttype:ty), - instance_resolvers : | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers : | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { let $ctxtvar = &$execarg.context(); @@ -241,10 +248,15 @@ macro_rules! graphql_interface { #[allow(unused_assignments)] #[allow(unused_mut)] - fn meta<'r>(info: &(), registry: &mut $crate::Registry<'r>) -> $crate::meta::MetaType<'r> { + fn meta<'r>( + info: &(), + registry: &mut $crate::Registry<'r> + ) -> $crate::meta::MetaType<'r> { let mut fields = Vec::new(); let mut description = None; - graphql_interface!(@ gather_meta, (registry, fields, info, description), $($items)*); + graphql_interface!( + @ gather_meta, (registry, fields, info, description), $($items)* + ); let mut mt = registry.build_interface_type::<$name>(&(), &fields); if let Some(description) = description { @@ -256,7 +268,13 @@ macro_rules! graphql_interface { #[allow(unused_variables)] #[allow(unused_mut)] - fn resolve_field(&$mainself, info: &(), field: &str, args: &$crate::Arguments, mut executor: &$crate::Executor<Self::Context>) -> $crate::ExecutionResult { + fn resolve_field( + &$mainself, + info: &(), + field: &str, + args: &$crate::Arguments, + mut executor: &$crate::Executor<Self::Context> + ) -> $crate::ExecutionResult { __graphql__build_field_matches!( ($outname, $mainself, field, args, executor), (), diff --git a/juniper/src/macros/object.rs b/juniper/src/macros/object.rs index 45966351..f59ff90d 100644 --- a/juniper/src/macros/object.rs +++ b/juniper/src/macros/object.rs @@ -246,7 +246,13 @@ macro_rules! graphql_object { ( @gather_object_meta, $reg:expr, $acc:expr, $info:expr, $descr:expr, $ifaces:expr, - field deprecated $reason:tt $name:ident $args:tt -> $t:ty as $desc:tt $body:block $( $rest:tt )* + field deprecated + $reason:tt + $name:ident + $args:tt -> $t:ty + as $desc:tt + $body:block + $( $rest:tt )* ) => { $acc.push(__graphql__args!( @apply_args, @@ -376,7 +382,10 @@ macro_rules! graphql_object { #[allow(unused_assignments)] #[allow(unused_mut)] - fn meta<'r>(info: &(), registry: &mut $crate::Registry<'r>) -> $crate::meta::MetaType<'r> { + fn meta<'r>( + info: &(), + registry: &mut $crate::Registry<'r> + ) -> $crate::meta::MetaType<'r> { let mut fields = Vec::new(); let mut description = None; let mut interfaces: Option<Vec<$crate::Type>> = None; diff --git a/juniper/src/macros/scalar.rs b/juniper/src/macros/scalar.rs index c1024703..3bf8d084 100644 --- a/juniper/src/macros/scalar.rs +++ b/juniper/src/macros/scalar.rs @@ -71,7 +71,10 @@ macro_rules! graphql_scalar { Some(graphql_scalar!( @as_expr, $outname )) } - fn meta<'r>(info: &(), registry: &mut $crate::Registry<'r>) -> $crate::meta::MetaType<'r> { + fn meta<'r>( + info: &(), + registry: &mut $crate::Registry<'r> + ) -> $crate::meta::MetaType<'r> { graphql_scalar!( @maybe_apply, $descr, description, registry.build_scalar_type::<Self>(info)) diff --git a/juniper/src/macros/tests/args.rs b/juniper/src/macros/tests/args.rs index 6d51632a..056624d0 100644 --- a/juniper/src/macros/tests/args.rs +++ b/juniper/src/macros/tests/args.rs @@ -170,17 +170,31 @@ fn introspect_field_exec_arg_and_more() { run_args_info_query("execArgAndMore", |args| { assert_eq!(args.len(), 1); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -189,17 +203,31 @@ fn introspect_field_single_arg() { run_args_info_query("singleArg", |args| { assert_eq!(args.len(), 1); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -208,29 +236,57 @@ fn introspect_field_multi_args() { run_args_info_query("multiArgs", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -239,29 +295,57 @@ fn introspect_field_multi_args_trailing_comma() { run_args_info_query("multiArgsTrailingComma", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::null()), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::null()), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -270,17 +354,31 @@ fn introspect_field_single_arg_descr() { run_args_info_query("singleArgDescr", |args| { assert_eq!(args.len(), 1); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg")), - ("description", Value::string("The arg")), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg")), + ("description", Value::string("The arg")), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -289,29 +387,57 @@ fn introspect_field_multi_args_descr() { run_args_info_query("multiArgsDescr", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::string("The first arg")), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::string("The first arg")), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::string("The second arg")), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::string("The second arg")), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -320,29 +446,57 @@ fn introspect_field_multi_args_descr_trailing_comma() { run_args_info_query("multiArgsDescrTrailingComma", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::string("The first arg")), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::string("The first arg")), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::string("The second arg")), - ("defaultValue", Value::null()), - ("type", Value::object(vec![ - ("name", Value::null()), - ("ofType", Value::object(vec![ - ("name", Value::string("Int")), - ].into_iter().collect())), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::string("The second arg")), + ("defaultValue", Value::null()), + ( + "type", + Value::object( + vec![ + ("name", Value::null()), + ( + "ofType", + Value::object( + vec![("name", Value::string("Int"))].into_iter().collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -351,15 +505,24 @@ fn introspect_field_arg_with_default() { run_args_info_query("argWithDefault", |args| { assert_eq!(args.len(), 1); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg")), - ("description", Value::null()), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg")), + ("description", Value::null()), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -368,25 +531,43 @@ fn introspect_field_multi_args_with_default() { run_args_info_query("multiArgsWithDefault", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::null()), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::null()), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::null()), - ("defaultValue", Value::string("456")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::null()), + ("defaultValue", Value::string("456")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -395,25 +576,43 @@ fn introspect_field_multi_args_with_default_trailing_comma() { run_args_info_query("multiArgsWithDefaultTrailingComma", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::null()), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::null()), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::null()), - ("defaultValue", Value::string("456")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::null()), + ("defaultValue", Value::string("456")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -422,15 +621,24 @@ fn introspect_field_arg_with_default_descr() { run_args_info_query("argWithDefaultDescr", |args| { assert_eq!(args.len(), 1); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg")), - ("description", Value::string("The arg")), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg")), + ("description", Value::string("The arg")), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -439,25 +647,43 @@ fn introspect_field_multi_args_with_default_descr() { run_args_info_query("multiArgsWithDefaultDescr", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::string("The first arg")), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::string("The first arg")), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::string("The second arg")), - ("defaultValue", Value::string("456")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::string("The second arg")), + ("defaultValue", Value::string("456")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -466,25 +692,43 @@ fn introspect_field_multi_args_with_default_trailing_comma_descr() { run_args_info_query("multiArgsWithDefaultTrailingCommaDescr", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::string("The first arg")), - ("defaultValue", Value::string("123")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::string("The first arg")), + ("defaultValue", Value::string("123")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::string("The second arg")), - ("defaultValue", Value::string("456")), - ("type", Value::object(vec![ - ("name", Value::string("Int")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ("description", Value::string("The second arg")), + ("defaultValue", Value::string("456")), + ( + "type", + Value::object( + vec![("name", Value::string("Int")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } @@ -493,24 +737,45 @@ fn introspect_field_args_with_complex_default() { run_args_info_query("argsWithComplexDefault", |args| { assert_eq!(args.len(), 2); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg1")), - ("description", Value::string("A string default argument")), - ("defaultValue", Value::string(r#""test""#)), - ("type", Value::object(vec![ - ("name", Value::string("String")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg1")), + ("description", Value::string("A string default argument")), + ("defaultValue", Value::string(r#""test""#)), + ( + "type", + Value::object( + vec![("name", Value::string("String")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); - assert!(args.contains(&Value::object(vec![ - ("name", Value::string("arg2")), - ("description", Value::string("An input object default argument")), - ("defaultValue", Value::string(r#"{x: 1}"#)), - ("type", Value::object(vec![ - ("name", Value::string("Point")), - ("ofType", Value::null()), - ].into_iter().collect())), - ].into_iter().collect()))); + assert!( + args.contains(&Value::object( + vec![ + ("name", Value::string("arg2")), + ( + "description", + Value::string("An input object default argument"), + ), + ("defaultValue", Value::string(r#"{x: 1}"#)), + ( + "type", + Value::object( + vec![("name", Value::string("Point")), ("ofType", Value::null())] + .into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + )) + ); }); } diff --git a/juniper/src/macros/tests/field.rs b/juniper/src/macros/tests/field.rs index d4c8dd44..52fe43a0 100644 --- a/juniper/src/macros/tests/field.rs +++ b/juniper/src/macros/tests/field.rs @@ -74,9 +74,8 @@ where } "#; let schema = RootNode::new(Root {}, EmptyMutation::<()>::new()); - let vars = vec![ - ("typeName".to_owned(), InputValue::string(type_name)), - ].into_iter() + let vars = vec![("typeName".to_owned(), InputValue::string(type_name))] + .into_iter() .collect(); let (result, errs) = ::execute(doc, None, &schema, &vars, &()).expect("Execution failed"); @@ -143,7 +142,10 @@ fn introspect_interface_field_simple() { fn introspect_object_field_description() { run_field_info_query("Root", "description", |field| { assert_eq!(field.get("name"), Some(&Value::string("description"))); - assert_eq!(field.get("description"), Some(&Value::string("Field description"))); + assert_eq!( + field.get("description"), + Some(&Value::string("Field description")) + ); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(false))); assert_eq!(field.get("deprecationReason"), Some(&Value::null())); }); @@ -153,7 +155,10 @@ fn introspect_object_field_description() { fn introspect_interface_field_description() { run_field_info_query("Interface", "description", |field| { assert_eq!(field.get("name"), Some(&Value::string("description"))); - assert_eq!(field.get("description"), Some(&Value::string("Field description"))); + assert_eq!( + field.get("description"), + Some(&Value::string("Field description")) + ); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(false))); assert_eq!(field.get("deprecationReason"), Some(&Value::null())); }); @@ -165,7 +170,10 @@ fn introspect_object_field_deprecated() { assert_eq!(field.get("name"), Some(&Value::string("deprecated"))); assert_eq!(field.get("description"), Some(&Value::null())); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(true))); - assert_eq!(field.get("deprecationReason"), Some(&Value::string("Deprecation reason"))); + assert_eq!( + field.get("deprecationReason"), + Some(&Value::string("Deprecation reason")) + ); }); } @@ -175,7 +183,10 @@ fn introspect_interface_field_deprecated() { assert_eq!(field.get("name"), Some(&Value::string("deprecated"))); assert_eq!(field.get("description"), Some(&Value::null())); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(true))); - assert_eq!(field.get("deprecationReason"), Some(&Value::string("Deprecation reason"))); + assert_eq!( + field.get("deprecationReason"), + Some(&Value::string("Deprecation reason")) + ); }); } @@ -183,9 +194,15 @@ fn introspect_interface_field_deprecated() { fn introspect_object_field_deprecated_descr() { run_field_info_query("Root", "deprecatedDescr", |field| { assert_eq!(field.get("name"), Some(&Value::string("deprecatedDescr"))); - assert_eq!(field.get("description"), Some(&Value::string("Field description"))); + assert_eq!( + field.get("description"), + Some(&Value::string("Field description")) + ); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(true))); - assert_eq!(field.get("deprecationReason"), Some(&Value::string("Deprecation reason"))); + assert_eq!( + field.get("deprecationReason"), + Some(&Value::string("Deprecation reason")) + ); }); } @@ -193,8 +210,14 @@ fn introspect_object_field_deprecated_descr() { fn introspect_interface_field_deprecated_descr() { run_field_info_query("Interface", "deprecatedDescr", |field| { assert_eq!(field.get("name"), Some(&Value::string("deprecatedDescr"))); - assert_eq!(field.get("description"), Some(&Value::string("Field description"))); + assert_eq!( + field.get("description"), + Some(&Value::string("Field description")) + ); assert_eq!(field.get("isDeprecated"), Some(&Value::boolean(true))); - assert_eq!(field.get("deprecationReason"), Some(&Value::string("Deprecation reason"))); + assert_eq!( + field.get("deprecationReason"), + Some(&Value::string("Deprecation reason")) + ); }); } diff --git a/juniper/src/macros/tests/interface.rs b/juniper/src/macros/tests/interface.rs index 27fd37e2..4380e631 100644 --- a/juniper/src/macros/tests/interface.rs +++ b/juniper/src/macros/tests/interface.rs @@ -53,7 +53,6 @@ graphql_interface!(CustomName: () as "ACustomNamedInterface" |&self| { instance_resolvers: |_| { Concrete => Some(Concrete) } }); - graphql_interface!(<'a> WithLifetime<'a>: () as "WithLifetime" |&self| { field simple() -> i32 { 0 } instance_resolvers: |_| { Concrete => Some(Concrete) } @@ -64,7 +63,6 @@ graphql_interface!(<T> WithGenerics<T>: () as "WithGenerics" |&self| { instance_resolvers: |_| { Concrete => Some(Concrete) } }); - graphql_interface!(DescriptionFirst: () |&self| { description: "A description" @@ -97,7 +95,6 @@ graphql_interface!(CommasWithTrailing: () |&self| { description: "A description", }); - graphql_interface!(CommasOnMeta: () |&self| { instance_resolvers: |_| { Concrete => Some(Concrete) } description: "A description", @@ -105,7 +102,6 @@ graphql_interface!(CommasOnMeta: () |&self| { field simple() -> i32 { 0 } }); - graphql_interface!(ResolversWithTrailingComma: () |&self| { instance_resolvers: |_| { Concrete => Some(Concrete), } description: "A description", @@ -132,7 +128,6 @@ graphql_object!(<'a> Root: () as "Root" |&self| { }); - fn run_type_info_query<F>(type_name: &str, f: F) where F: Fn(&OrderMap<String, Value>, &Vec<Value>) -> (), @@ -149,9 +144,8 @@ where } "#; let schema = RootNode::new(Root {}, EmptyMutation::<()>::new()); - let vars = vec![ - ("typeName".to_owned(), InputValue::string(type_name)), - ].into_iter() + let vars = vec![("typeName".to_owned(), InputValue::string(type_name))] + .into_iter() .collect(); let (result, errs) = ::execute(doc, None, &schema, &vars, &()).expect("Execution failed"); @@ -180,12 +174,19 @@ where #[test] fn introspect_custom_name() { run_type_info_query("ACustomNamedInterface", |object, fields| { - assert_eq!(object.get("name"), Some(&Value::string("ACustomNamedInterface"))); + assert_eq!( + object.get("name"), + Some(&Value::string("ACustomNamedInterface")) + ); assert_eq!(object.get("description"), Some(&Value::null())); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -195,9 +196,13 @@ fn introspect_with_lifetime() { assert_eq!(object.get("name"), Some(&Value::string("WithLifetime"))); assert_eq!(object.get("description"), Some(&Value::null())); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -207,9 +212,13 @@ fn introspect_with_generics() { assert_eq!(object.get("name"), Some(&Value::string("WithGenerics"))); assert_eq!(object.get("description"), Some(&Value::null())); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -217,11 +226,18 @@ fn introspect_with_generics() { fn introspect_description_first() { run_type_info_query("DescriptionFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("DescriptionFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -229,11 +245,18 @@ fn introspect_description_first() { fn introspect_fields_first() { run_type_info_query("FieldsFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("FieldsFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -241,23 +264,40 @@ fn introspect_fields_first() { fn introspect_interfaces_first() { run_type_info_query("InterfacesFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("InterfacesFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } #[test] fn introspect_commas_with_trailing() { run_type_info_query("CommasWithTrailing", |object, fields| { - assert_eq!(object.get("name"), Some(&Value::string("CommasWithTrailing"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("name"), + Some(&Value::string("CommasWithTrailing")) + ); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } @@ -265,22 +305,39 @@ fn introspect_commas_with_trailing() { fn introspect_commas_on_meta() { run_type_info_query("CommasOnMeta", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("CommasOnMeta"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } #[test] fn introspect_resolvers_with_trailing_comma() { run_type_info_query("ResolversWithTrailingComma", |object, fields| { - assert_eq!(object.get("name"), Some(&Value::string("ResolversWithTrailingComma"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); + assert_eq!( + object.get("name"), + Some(&Value::string("ResolversWithTrailingComma")) + ); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); - assert!(fields.contains(&Value::object(vec![ - ("name", Value::string("simple")), - ].into_iter().collect()))); + assert!( + fields.contains(&Value::object( + vec![("name", Value::string("simple"))] + .into_iter() + .collect() + )) + ); }); } diff --git a/juniper/src/macros/tests/mod.rs b/juniper/src/macros/tests/mod.rs index 0cba2fb7..c3b038cc 100644 --- a/juniper/src/macros/tests/mod.rs +++ b/juniper/src/macros/tests/mod.rs @@ -4,6 +4,3 @@ mod field; mod object; mod interface; mod union; - - - diff --git a/juniper/src/macros/tests/object.rs b/juniper/src/macros/tests/object.rs index 4fde5d29..dd8dba49 100644 --- a/juniper/src/macros/tests/object.rs +++ b/juniper/src/macros/tests/object.rs @@ -5,7 +5,7 @@ use ast::InputValue; use value::Value; use schema::model::RootNode; use types::scalars::EmptyMutation; -use executor::{FieldResult, Context}; +use executor::{Context, FieldResult}; /* @@ -46,7 +46,6 @@ graphql_object!(CustomName: () as "ACustomNamedType" |&self| { field simple() -> i32 { 0 } }); - graphql_object!(<'a> WithLifetime<'a>: () as "WithLifetime" |&self| { field simple() -> i32 { 0 } }); @@ -55,7 +54,6 @@ graphql_object!(<T> WithGenerics<T>: () as "WithGenerics" |&self| { field simple() -> i32 { 0 } }); - graphql_interface!(Interface: () |&self| { field simple() -> i32 { 0 } @@ -96,7 +94,6 @@ graphql_object!(CommasWithTrailing: () |&self| { description: "A description", }); - graphql_object!(CommasOnMeta: () |&self| { interfaces: [Interface], description: "A description", @@ -108,15 +105,25 @@ struct InnerContext; impl Context for InnerContext {} struct InnerType; -graphql_object!(InnerType: InnerContext |&self| { -}); +graphql_object!(InnerType: InnerContext | &self | {}); struct CtxSwitcher; graphql_object!(CtxSwitcher: InnerContext |&self| { - field ctx_switch_always(&executor) -> (&InnerContext, InnerType) { (executor.context(), InnerType) } - field ctx_switch_opt(&executor) -> Option<(&InnerContext, InnerType)> { Some((executor.context(), InnerType)) } - field ctx_switch_res(&executor) -> FieldResult<(&InnerContext, InnerType)> { Ok((executor.context(), InnerType)) } - field ctx_switch_res_opt(&executor) -> FieldResult<Option<(&InnerContext, InnerType)>> { Ok(Some((executor.context(), InnerType))) } + field ctx_switch_always(&executor) -> (&InnerContext, InnerType) { + (executor.context(), InnerType) + } + + field ctx_switch_opt(&executor) -> Option<(&InnerContext, InnerType)> { + Some((executor.context(), InnerType)) + } + + field ctx_switch_res(&executor) -> FieldResult<(&InnerContext, InnerType)> { + Ok((executor.context(), InnerType)) + } + + field ctx_switch_res_opt(&executor) -> FieldResult<Option<(&InnerContext, InnerType)>> { + Ok(Some((executor.context(), InnerType))) + } }); graphql_object!(<'a> Root: InnerContext as "Root" |&self| { @@ -135,7 +142,6 @@ graphql_object!(<'a> Root: InnerContext as "Root" |&self| { field ctx_switcher() -> CtxSwitcher { CtxSwitcher {} } }); - fn run_type_info_query<F>(type_name: &str, f: F) where F: Fn(&OrderMap<String, Value>, &Vec<Value>) -> (), @@ -164,12 +170,12 @@ where } "#; let schema = RootNode::new(Root {}, EmptyMutation::<InnerContext>::new()); - let vars = vec![ - ("typeName".to_owned(), InputValue::string(type_name)), - ].into_iter() + let vars = vec![("typeName".to_owned(), InputValue::string(type_name))] + .into_iter() .collect(); - let (result, errs) = ::execute(doc, None, &schema, &vars, &InnerContext).expect("Execution failed"); + let (result, errs) = + ::execute(doc, None, &schema, &vars, &InnerContext).expect("Execution failed"); assert_eq!(errs, []); @@ -238,13 +244,22 @@ fn introspect_with_generics() { fn introspect_description_first() { run_type_info_query("DescriptionFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("DescriptionFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); - assert_eq!(object.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Interface")), - ("kind", Value::string("INTERFACE")), - ].into_iter().collect()), - ]))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); + assert_eq!( + object.get("interfaces"), + Some(&Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Interface")), + ("kind", Value::string("INTERFACE")), + ].into_iter() + .collect(), + ), + ])) + ); assert!(fields.contains(&graphql_value!({ "name": "simple", @@ -257,13 +272,22 @@ fn introspect_description_first() { fn introspect_fields_first() { run_type_info_query("FieldsFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("FieldsFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); - assert_eq!(object.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Interface")), - ("kind", Value::string("INTERFACE")), - ].into_iter().collect()), - ]))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); + assert_eq!( + object.get("interfaces"), + Some(&Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Interface")), + ("kind", Value::string("INTERFACE")), + ].into_iter() + .collect(), + ), + ])) + ); assert!(fields.contains(&graphql_value!({ "name": "simple", @@ -276,13 +300,22 @@ fn introspect_fields_first() { fn introspect_interfaces_first() { run_type_info_query("InterfacesFirst", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("InterfacesFirst"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); - assert_eq!(object.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Interface")), - ("kind", Value::string("INTERFACE")), - ].into_iter().collect()), - ]))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); + assert_eq!( + object.get("interfaces"), + Some(&Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Interface")), + ("kind", Value::string("INTERFACE")), + ].into_iter() + .collect(), + ), + ])) + ); assert!(fields.contains(&graphql_value!({ "name": "simple", @@ -294,14 +327,26 @@ fn introspect_interfaces_first() { #[test] fn introspect_commas_with_trailing() { run_type_info_query("CommasWithTrailing", |object, fields| { - assert_eq!(object.get("name"), Some(&Value::string("CommasWithTrailing"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); - assert_eq!(object.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Interface")), - ("kind", Value::string("INTERFACE")), - ].into_iter().collect()), - ]))); + assert_eq!( + object.get("name"), + Some(&Value::string("CommasWithTrailing")) + ); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); + assert_eq!( + object.get("interfaces"), + Some(&Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Interface")), + ("kind", Value::string("INTERFACE")), + ].into_iter() + .collect(), + ), + ])) + ); assert!(fields.contains(&graphql_value!({ "name": "simple", @@ -314,13 +359,22 @@ fn introspect_commas_with_trailing() { fn introspect_commas_on_meta() { run_type_info_query("CommasOnMeta", |object, fields| { assert_eq!(object.get("name"), Some(&Value::string("CommasOnMeta"))); - assert_eq!(object.get("description"), Some(&Value::string("A description"))); - assert_eq!(object.get("interfaces"), Some(&Value::list(vec![ - Value::object(vec![ - ("name", Value::string("Interface")), - ("kind", Value::string("INTERFACE")), - ].into_iter().collect()), - ]))); + assert_eq!( + object.get("description"), + Some(&Value::string("A description")) + ); + assert_eq!( + object.get("interfaces"), + Some(&Value::list(vec![ + Value::object( + vec![ + ("name", Value::string("Interface")), + ("kind", Value::string("INTERFACE")), + ].into_iter() + .collect(), + ), + ])) + ); assert!(fields.contains(&graphql_value!({ "name": "simple", diff --git a/juniper/src/macros/tests/scalar.rs b/juniper/src/macros/tests/scalar.rs index 764467c0..f417353f 100644 --- a/juniper/src/macros/tests/scalar.rs +++ b/juniper/src/macros/tests/scalar.rs @@ -157,7 +157,13 @@ fn scalar_description_introspection() { "#; run_type_info_query(doc, |type_info| { - assert_eq!(type_info.get("name"), Some(&Value::string("ScalarDescription"))); - assert_eq!(type_info.get("description"), Some(&Value::string("A sample scalar, represented as an integer"))); + assert_eq!( + type_info.get("name"), + Some(&Value::string("ScalarDescription")) + ); + assert_eq!( + type_info.get("description"), + Some(&Value::string("A sample scalar, represented as an integer")) + ); }); } diff --git a/juniper/src/macros/tests/union.rs b/juniper/src/macros/tests/union.rs index 52acab2c..4e8261a4 100644 --- a/juniper/src/macros/tests/union.rs +++ b/juniper/src/macros/tests/union.rs @@ -109,7 +109,6 @@ graphql_object!(<'a> Root: () as "Root" |&self| { } }); - fn run_type_info_query<F>(type_name: &str, f: F) where F: Fn(&OrderMap<String, Value>, &Vec<Value>) -> (), @@ -126,9 +125,8 @@ where } "#; let schema = RootNode::new(Root {}, EmptyMutation::<()>::new()); - let vars = vec![ - ("typeName".to_owned(), InputValue::string(type_name)), - ].into_iter() + let vars = vec![("typeName".to_owned(), InputValue::string(type_name))] + .into_iter() .collect(); let (result, errs) = ::execute(doc, None, &schema, &vars, &()).expect("Execution failed"); @@ -154,16 +152,19 @@ where f(type_info, possible_types); } - #[test] fn introspect_custom_name() { run_type_info_query("ACustomNamedUnion", |union, possible_types| { assert_eq!(union.get("name"), Some(&Value::string("ACustomNamedUnion"))); assert_eq!(union.get("description"), Some(&Value::null())); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } @@ -173,9 +174,13 @@ fn introspect_with_lifetime() { assert_eq!(union.get("name"), Some(&Value::string("WithLifetime"))); assert_eq!(union.get("description"), Some(&Value::null())); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } @@ -185,9 +190,13 @@ fn introspect_with_generics() { assert_eq!(union.get("name"), Some(&Value::string("WithGenerics"))); assert_eq!(union.get("description"), Some(&Value::null())); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } @@ -195,11 +204,18 @@ fn introspect_with_generics() { fn introspect_description_first() { run_type_info_query("DescriptionFirst", |union, possible_types| { assert_eq!(union.get("name"), Some(&Value::string("DescriptionFirst"))); - assert_eq!(union.get("description"), Some(&Value::string("A description"))); + assert_eq!( + union.get("description"), + Some(&Value::string("A description")) + ); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } @@ -207,34 +223,61 @@ fn introspect_description_first() { fn introspect_resolvers_first() { run_type_info_query("ResolversFirst", |union, possible_types| { assert_eq!(union.get("name"), Some(&Value::string("ResolversFirst"))); - assert_eq!(union.get("description"), Some(&Value::string("A description"))); + assert_eq!( + union.get("description"), + Some(&Value::string("A description")) + ); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } #[test] fn introspect_commas_with_trailing() { run_type_info_query("CommasWithTrailing", |union, possible_types| { - assert_eq!(union.get("name"), Some(&Value::string("CommasWithTrailing"))); - assert_eq!(union.get("description"), Some(&Value::string("A description"))); + assert_eq!( + union.get("name"), + Some(&Value::string("CommasWithTrailing")) + ); + assert_eq!( + union.get("description"), + Some(&Value::string("A description")) + ); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } #[test] fn introspect_resolvers_with_trailing_comma() { run_type_info_query("ResolversWithTrailingComma", |union, possible_types| { - assert_eq!(union.get("name"), Some(&Value::string("ResolversWithTrailingComma"))); - assert_eq!(union.get("description"), Some(&Value::string("A description"))); + assert_eq!( + union.get("name"), + Some(&Value::string("ResolversWithTrailingComma")) + ); + assert_eq!( + union.get("description"), + Some(&Value::string("A description")) + ); - assert!(possible_types.contains(&Value::object(vec![ - ("name", Value::string("Concrete")), - ].into_iter().collect()))); + assert!( + possible_types.contains(&Value::object( + vec![("name", Value::string("Concrete"))] + .into_iter() + .collect() + )) + ); }); } diff --git a/juniper/src/macros/union.rs b/juniper/src/macros/union.rs index 012296c5..df0b3aad 100644 --- a/juniper/src/macros/union.rs +++ b/juniper/src/macros/union.rs @@ -40,7 +40,8 @@ macro_rules! graphql_union { ( @ gather_meta, ($reg:expr, $acc:expr, $descr:expr), - instance_resolvers: | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers: | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { $acc = vec![ $( @@ -56,7 +57,8 @@ macro_rules! graphql_union { ( @ concrete_type_name, ($outname:tt, $ctxtarg:ident, $ctxttype:ty), - instance_resolvers: | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers: | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { let $ctxtvar = &$ctxtarg; @@ -74,7 +76,8 @@ macro_rules! graphql_union { ( @ resolve_into_type, ($outname:tt, $typenamearg:ident, $execarg:ident, $ctxttype:ty), - instance_resolvers: | $ctxtvar:pat | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* + instance_resolvers: | $ctxtvar:pat + | { $( $srctype:ty => $resolver:expr ),* $(,)* } $( $rest:tt )* ) => { let $ctxtvar = &$execarg.context(); diff --git a/juniper/src/parser/document.rs b/juniper/src/parser/document.rs index 74ae1146..d26e2e48 100644 --- a/juniper/src/parser/document.rs +++ b/juniper/src/parser/document.rs @@ -32,9 +32,9 @@ fn parse_definition<'a>(parser: &mut Parser<'a>) -> UnlocatedParseResult<'a, Def Token::CurlyOpen | Token::Name("query") | Token::Name("mutation") => Ok( Definition::Operation(try!(parse_operation_definition(parser))), ), - Token::Name("fragment") => Ok(Definition::Fragment( - try!(parse_fragment_definition(parser)), - )), + Token::Name("fragment") => Ok(Definition::Fragment(try!(parse_fragment_definition( + parser + )))), _ => Err(parser.next()?.map(ParseError::UnexpectedToken)), } } @@ -237,13 +237,12 @@ fn parse_arguments<'a>(parser: &mut Parser<'a>) -> OptionParseResult<'a, Argumen Ok(None) } else { Ok(Some( - try!( - parser - .delimited_nonempty_list(&Token::ParenOpen, parse_argument, &Token::ParenClose) - ).map(|args| { - Arguments { - items: args.into_iter().map(|s| s.item).collect(), - } + try!(parser.delimited_nonempty_list( + &Token::ParenOpen, + parse_argument, + &Token::ParenClose + )).map(|args| Arguments { + items: args.into_iter().map(|s| s.item).collect(), }), )) } @@ -282,10 +281,8 @@ fn parse_variable_definitions<'a>( &Token::ParenOpen, parse_variable_definition, &Token::ParenClose - )).map(|defs| { - VariableDefinitions { - items: defs.into_iter().map(|s| s.item).collect(), - } + )).map(|defs| VariableDefinitions { + items: defs.into_iter().map(|s| s.item).collect(), }), )) } diff --git a/juniper/src/parser/lexer.rs b/juniper/src/parser/lexer.rs index 2eae8964..88d06532 100644 --- a/juniper/src/parser/lexer.rs +++ b/juniper/src/parser/lexer.rs @@ -127,9 +127,8 @@ impl<'a> Lexer<'a> { let start_pos = self.position.clone(); - self.next_char().expect( - "Internal error in GraphQL lexer: emit_single_char reached EOF", - ); + self.next_char() + .expect("Internal error in GraphQL lexer: emit_single_char reached EOF"); Spanning::single_width(&start_pos, t) } @@ -345,12 +344,12 @@ impl<'a> Lexer<'a> { )); } - let code_point = try!(u32::from_str_radix(escape, 16).map_err(|_| { - Spanning::zero_width( + let code_point = try!( + u32::from_str_radix(escape, 16).map_err(|_| Spanning::zero_width( start_pos, LexerError::UnknownEscapeSequence("\\u".to_owned() + escape), - ) - })); + )) + ); char::from_u32(code_point).ok_or_else(|| { Spanning::zero_width( @@ -392,10 +391,12 @@ impl<'a> Lexer<'a> { let mantissa = frac_part .map(|f| f as f64) - .map(|frac| if frac > 0f64 { - frac / 10f64.powf(frac.log10().floor() + 1f64) - } else { - 0f64 + .map(|frac| { + if frac > 0f64 { + frac / 10f64.powf(frac.log10().floor() + 1f64) + } else { + 0f64 + } }) .map(|m| if int_part < 0 { -m } else { m }); @@ -472,9 +473,8 @@ impl<'a> Lexer<'a> { } } - i32::from_str_radix(&self.source[start_idx..end_idx + 1], 10).map_err(|_| { - Spanning::zero_width(&start_pos, LexerError::InvalidNumber) - }) + i32::from_str_radix(&self.source[start_idx..end_idx + 1], 10) + .map_err(|_| Spanning::zero_width(&start_pos, LexerError::InvalidNumber)) } } diff --git a/juniper/src/parser/parser.rs b/juniper/src/parser/parser.rs index b93d7f18..c700e2ca 100644 --- a/juniper/src/parser/parser.rs +++ b/juniper/src/parser/parser.rs @@ -171,10 +171,12 @@ impl<'a> Parser<'a> { Spanning { item: Token::Name(_), .. - } => Ok(self.next()?.map(|token| if let Token::Name(name) = token { - name - } else { - panic!("Internal parse error in `expect_name`"); + } => Ok(self.next()?.map(|token| { + if let Token::Name(name) = token { + name + } else { + panic!("Internal parse error in `expect_name`"); + } })), Spanning { item: Token::EndOfFile, diff --git a/juniper/src/parser/tests/value.rs b/juniper/src/parser/tests/value.rs index 83b869fe..e9d4d324 100644 --- a/juniper/src/parser/tests/value.rs +++ b/juniper/src/parser/tests/value.rs @@ -4,7 +4,6 @@ use ast::InputValue; use parser::{Lexer, Parser, SourcePosition, Spanning}; use parser::value::parse_value_literal; - fn parse_value(s: &str) -> Spanning<InputValue> { let mut lexer = Lexer::new(s); let mut parser = Parser::new(&mut lexer).expect(&format!("Lexer error on input {:#?}", s)); diff --git a/juniper/src/parser/value.rs b/juniper/src/parser/value.rs index d12abb4f..3bd5678b 100644 --- a/juniper/src/parser/value.rs +++ b/juniper/src/parser/value.rs @@ -33,10 +33,12 @@ pub fn parse_value_literal<'a>( Spanning { item: Token::String(_), .. - } => Ok(parser.next()?.map(|t| if let Token::String(s) = t { - InputValue::string(s) - } else { - panic!("Internal parser error"); + } => Ok(parser.next()?.map(|t| { + if let Token::String(s) = t { + InputValue::string(s) + } else { + panic!("Internal parser error"); + } })), Spanning { item: Token::Name("true"), @@ -53,38 +55,30 @@ pub fn parse_value_literal<'a>( Spanning { item: Token::Name(name), .. - } => Ok( - parser - .next()? - .map(|_| InputValue::enum_value(name.to_owned())), - ), + } => Ok(parser + .next()? + .map(|_| InputValue::enum_value(name.to_owned()))), _ => Err(parser.next()?.map(ParseError::UnexpectedToken)), } } fn parse_list_literal<'a>(parser: &mut Parser<'a>, is_const: bool) -> ParseResult<'a, InputValue> { - Ok( - try!(parser.delimited_list( - &Token::BracketOpen, - |p| parse_value_literal(p, is_const), - &Token::BracketClose - )).map(InputValue::parsed_list), - ) + Ok(try!(parser.delimited_list( + &Token::BracketOpen, + |p| parse_value_literal(p, is_const), + &Token::BracketClose + )).map(InputValue::parsed_list)) } fn parse_object_literal<'a>( parser: &mut Parser<'a>, is_const: bool, ) -> ParseResult<'a, InputValue> { - Ok( - try!(parser.delimited_list( - &Token::CurlyOpen, - |p| parse_object_field(p, is_const), - &Token::CurlyClose - )).map(|items| { - InputValue::parsed_object(items.into_iter().map(|s| s.item).collect()) - }), - ) + Ok(try!(parser.delimited_list( + &Token::CurlyOpen, + |p| parse_object_field(p, is_const), + &Token::CurlyClose + )).map(|items| InputValue::parsed_object(items.into_iter().map(|s| s.item).collect()))) } fn parse_object_field<'a>( diff --git a/juniper/src/schema/meta.rs b/juniper/src/schema/meta.rs index 551384b4..9e8a6790 100644 --- a/juniper/src/schema/meta.rs +++ b/juniper/src/schema/meta.rs @@ -8,85 +8,62 @@ use types::base::TypeKind; /// Scalar type metadata pub struct ScalarMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, } /// List type metadata #[derive(Debug)] pub struct ListMeta<'a> { - #[doc(hidden)] - pub of_type: Type<'a>, + #[doc(hidden)] pub of_type: Type<'a>, } /// Nullable type metadata #[derive(Debug)] pub struct NullableMeta<'a> { - #[doc(hidden)] - pub of_type: Type<'a>, + #[doc(hidden)] pub of_type: Type<'a>, } /// Object type metadata #[derive(Debug)] pub struct ObjectMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub fields: Vec<Field<'a>>, - #[doc(hidden)] - pub interface_names: Vec<String>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub fields: Vec<Field<'a>>, + #[doc(hidden)] pub interface_names: Vec<String>, } /// Enum type metadata pub struct EnumMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub values: Vec<EnumValue>, - #[doc(hidden)] - pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub values: Vec<EnumValue>, + #[doc(hidden)] pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, } /// Interface type metadata #[derive(Debug)] pub struct InterfaceMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub fields: Vec<Field<'a>>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub fields: Vec<Field<'a>>, } /// Union type metadata #[derive(Debug)] pub struct UnionMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub of_type_names: Vec<String>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub of_type_names: Vec<String>, } /// Input object metadata pub struct InputObjectMeta<'a> { - #[doc(hidden)] - pub name: Cow<'a, str>, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub input_fields: Vec<Argument<'a>>, - #[doc(hidden)] - pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, + #[doc(hidden)] pub name: Cow<'a, str>, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub input_fields: Vec<Argument<'a>>, + #[doc(hidden)] pub try_parse_fn: Box<Fn(&InputValue) -> bool + Send + Sync>, } /// A placeholder for not-yet-registered types @@ -95,59 +72,40 @@ pub struct InputObjectMeta<'a> { /// is inserted into a registry to indicate existence. #[derive(Debug)] pub struct PlaceholderMeta<'a> { - #[doc(hidden)] - pub of_type: Type<'a>, + #[doc(hidden)] pub of_type: Type<'a>, } /// Generic type metadata #[derive(Debug)] pub enum MetaType<'a> { - #[doc(hidden)] - Scalar(ScalarMeta<'a>), - #[doc(hidden)] - List(ListMeta<'a>), - #[doc(hidden)] - Nullable(NullableMeta<'a>), - #[doc(hidden)] - Object(ObjectMeta<'a>), - #[doc(hidden)] - Enum(EnumMeta<'a>), - #[doc(hidden)] - Interface(InterfaceMeta<'a>), - #[doc(hidden)] - Union(UnionMeta<'a>), - #[doc(hidden)] - InputObject(InputObjectMeta<'a>), - #[doc(hidden)] - Placeholder(PlaceholderMeta<'a>), + #[doc(hidden)] Scalar(ScalarMeta<'a>), + #[doc(hidden)] List(ListMeta<'a>), + #[doc(hidden)] Nullable(NullableMeta<'a>), + #[doc(hidden)] Object(ObjectMeta<'a>), + #[doc(hidden)] Enum(EnumMeta<'a>), + #[doc(hidden)] Interface(InterfaceMeta<'a>), + #[doc(hidden)] Union(UnionMeta<'a>), + #[doc(hidden)] InputObject(InputObjectMeta<'a>), + #[doc(hidden)] Placeholder(PlaceholderMeta<'a>), } /// Metadata for a field #[derive(Debug, Clone)] pub struct Field<'a> { - #[doc(hidden)] - pub name: String, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub arguments: Option<Vec<Argument<'a>>>, - #[doc(hidden)] - pub field_type: Type<'a>, - #[doc(hidden)] - pub deprecation_reason: Option<String>, + #[doc(hidden)] pub name: String, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub arguments: Option<Vec<Argument<'a>>>, + #[doc(hidden)] pub field_type: Type<'a>, + #[doc(hidden)] pub deprecation_reason: Option<String>, } /// Metadata for an argument to a field #[derive(Debug, Clone)] pub struct Argument<'a> { - #[doc(hidden)] - pub name: String, - #[doc(hidden)] - pub description: Option<String>, - #[doc(hidden)] - pub arg_type: Type<'a>, - #[doc(hidden)] - pub default_value: Option<InputValue>, + #[doc(hidden)] pub name: String, + #[doc(hidden)] pub description: Option<String>, + #[doc(hidden)] pub arg_type: Type<'a>, + #[doc(hidden)] pub default_value: Option<InputValue>, } /// Metadata for a single value in an enum @@ -174,12 +132,12 @@ impl<'a> MetaType<'a> { /// Lists, non-null wrappers, and placeholders don't have names. pub fn name(&self) -> Option<&str> { match *self { - MetaType::Scalar(ScalarMeta { ref name, .. }) | - MetaType::Object(ObjectMeta { ref name, .. }) | - MetaType::Enum(EnumMeta { ref name, .. }) | - MetaType::Interface(InterfaceMeta { ref name, .. }) | - MetaType::Union(UnionMeta { ref name, .. }) | - MetaType::InputObject(InputObjectMeta { ref name, .. }) => Some(name), + MetaType::Scalar(ScalarMeta { ref name, .. }) + | MetaType::Object(ObjectMeta { ref name, .. }) + | MetaType::Enum(EnumMeta { ref name, .. }) + | MetaType::Interface(InterfaceMeta { ref name, .. }) + | MetaType::Union(UnionMeta { ref name, .. }) + | MetaType::InputObject(InputObjectMeta { ref name, .. }) => Some(name), _ => None, } } @@ -191,20 +149,20 @@ impl<'a> MetaType<'a> { match *self { MetaType::Scalar(ScalarMeta { ref description, .. - }) | - MetaType::Object(ObjectMeta { + }) + | MetaType::Object(ObjectMeta { ref description, .. - }) | - MetaType::Enum(EnumMeta { + }) + | MetaType::Enum(EnumMeta { ref description, .. - }) | - MetaType::Interface(InterfaceMeta { + }) + | MetaType::Interface(InterfaceMeta { ref description, .. - }) | - MetaType::Union(UnionMeta { + }) + | MetaType::Union(UnionMeta { ref description, .. - }) | - MetaType::InputObject(InputObjectMeta { + }) + | MetaType::InputObject(InputObjectMeta { ref description, .. }) => description.as_ref(), _ => None, @@ -234,8 +192,8 @@ impl<'a> MetaType<'a> { /// Only objects and interfaces have fields. This method always returns `None` for other types. pub fn field_by_name(&self, name: &str) -> Option<&Field> { match *self { - MetaType::Object(ObjectMeta { ref fields, .. }) | - MetaType::Interface(InterfaceMeta { ref fields, .. }) => { + MetaType::Object(ObjectMeta { ref fields, .. }) + | MetaType::Interface(InterfaceMeta { ref fields, .. }) => { fields.iter().find(|f| f.name == name) } _ => None, @@ -257,12 +215,12 @@ impl<'a> MetaType<'a> { /// Construct a `Type` literal instance based on the metadata pub fn as_type(&self) -> Type<'a> { match *self { - MetaType::Scalar(ScalarMeta { ref name, .. }) | - MetaType::Object(ObjectMeta { ref name, .. }) | - MetaType::Enum(EnumMeta { ref name, .. }) | - MetaType::Interface(InterfaceMeta { ref name, .. }) | - MetaType::Union(UnionMeta { ref name, .. }) | - MetaType::InputObject(InputObjectMeta { ref name, .. }) => { + MetaType::Scalar(ScalarMeta { ref name, .. }) + | MetaType::Object(ObjectMeta { ref name, .. }) + | MetaType::Enum(EnumMeta { ref name, .. }) + | MetaType::Interface(InterfaceMeta { ref name, .. }) + | MetaType::Union(UnionMeta { ref name, .. }) + | MetaType::InputObject(InputObjectMeta { ref name, .. }) => { Type::NonNullNamed(name.clone()) } MetaType::List(ListMeta { ref of_type }) => { @@ -287,11 +245,11 @@ impl<'a> MetaType<'a> { match *self { MetaType::Scalar(ScalarMeta { ref try_parse_fn, .. - }) | - MetaType::Enum(EnumMeta { + }) + | MetaType::Enum(EnumMeta { ref try_parse_fn, .. - }) | - MetaType::InputObject(InputObjectMeta { + }) + | MetaType::InputObject(InputObjectMeta { ref try_parse_fn, .. }) => Some(try_parse_fn), _ => None, @@ -345,7 +303,9 @@ impl<'a> ScalarMeta<'a> { ScalarMeta { name: name, description: None, - try_parse_fn: Box::new(|v: &InputValue| <T as FromInputValue>::from_input_value(v).is_some()), + try_parse_fn: Box::new(|v: &InputValue| { + <T as FromInputValue>::from_input_value(v).is_some() + }), } } @@ -431,7 +391,9 @@ impl<'a> EnumMeta<'a> { name: name, description: None, values: values.to_vec(), - try_parse_fn: Box::new(|v: &InputValue| <T as FromInputValue>::from_input_value(v).is_some()), + try_parse_fn: Box::new(|v: &InputValue| { + <T as FromInputValue>::from_input_value(v).is_some() + }), } } @@ -510,7 +472,9 @@ impl<'a> InputObjectMeta<'a> { name: name, description: None, input_fields: input_fields.to_vec(), - try_parse_fn: Box::new(|v: &InputValue| <T as FromInputValue>::from_input_value(v).is_some()), + try_parse_fn: Box::new(|v: &InputValue| { + <T as FromInputValue>::from_input_value(v).is_some() + }), } } diff --git a/juniper/src/schema/model.rs b/juniper/src/schema/model.rs index 249b7382..20aa1d95 100644 --- a/juniper/src/schema/model.rs +++ b/juniper/src/schema/model.rs @@ -13,16 +13,11 @@ use schema::meta::{Argument, InterfaceMeta, MetaType, ObjectMeta, PlaceholderMet /// This brings the mutation and query types together, and provides the /// predefined metadata fields. pub struct RootNode<'a, QueryT: GraphQLType, MutationT: GraphQLType> { - #[doc(hidden)] - pub query_type: QueryT, - #[doc(hidden)] - pub query_info: QueryT::TypeInfo, - #[doc(hidden)] - pub mutation_type: MutationT, - #[doc(hidden)] - pub mutation_info: MutationT::TypeInfo, - #[doc(hidden)] - pub schema: SchemaType<'a>, + #[doc(hidden)] pub query_type: QueryT, + #[doc(hidden)] pub query_info: QueryT::TypeInfo, + #[doc(hidden)] pub mutation_type: MutationT, + #[doc(hidden)] pub mutation_info: MutationT::TypeInfo, + #[doc(hidden)] pub schema: SchemaType<'a>, } /// Metadata for a schema @@ -55,12 +50,9 @@ pub enum DirectiveLocation { Query, Mutation, Field, - #[graphql(name = "FRAGMENT_DEFINITION")] - FragmentDefinition, - #[graphql(name = "FRAGMENT_SPREAD")] - FragmentSpread, - #[graphql(name = "INLINE_SPREAD")] - InlineFragment, + #[graphql(name = "FRAGMENT_DEFINITION")] FragmentDefinition, + #[graphql(name = "FRAGMENT_SPREAD")] FragmentSpread, + #[graphql(name = "INLINE_SPREAD")] InlineFragment, } impl<'a, QueryT, MutationT> RootNode<'a, QueryT, MutationT> @@ -277,9 +269,9 @@ impl<'a> SchemaType<'a> { } pub fn is_possible_type(&self, abstract_type: &MetaType, possible_type: &MetaType) -> bool { - self.possible_types(abstract_type).into_iter().any(|t| { - (t as *const MetaType) == (possible_type as *const MetaType) - }) + self.possible_types(abstract_type) + .into_iter() + .any(|t| (t as *const MetaType) == (possible_type as *const MetaType)) } pub fn is_subtype<'b>(&self, sub_type: &Type<'b>, super_type: &Type<'b>) -> bool { @@ -290,14 +282,14 @@ impl<'a> SchemaType<'a> { } match (super_type, sub_type) { - (&NonNullNamed(ref super_name), &NonNullNamed(ref sub_name)) | - (&Named(ref super_name), &Named(ref sub_name)) | - (&Named(ref super_name), &NonNullNamed(ref sub_name)) => { + (&NonNullNamed(ref super_name), &NonNullNamed(ref sub_name)) + | (&Named(ref super_name), &Named(ref sub_name)) + | (&Named(ref super_name), &NonNullNamed(ref sub_name)) => { self.is_named_subtype(sub_name, super_name) } - (&NonNullList(ref super_inner), &NonNullList(ref sub_inner)) | - (&List(ref super_inner), &List(ref sub_inner)) | - (&List(ref super_inner), &NonNullList(ref sub_inner)) => { + (&NonNullList(ref super_inner), &NonNullList(ref sub_inner)) + | (&List(ref super_inner), &List(ref sub_inner)) + | (&List(ref super_inner), &NonNullList(ref sub_inner)) => { self.is_subtype(sub_inner, super_inner) } _ => false, diff --git a/juniper/src/schema/schema.rs b/juniper/src/schema/schema.rs index 0d0491aa..cfeff2d5 100644 --- a/juniper/src/schema/schema.rs +++ b/juniper/src/schema/schema.rs @@ -142,11 +142,15 @@ graphql_object!(<'a> TypeType<'a>: SchemaType<'a> as "__Type" |&self| { .filter_map(|tn| schema.type_by_name(tn)) .collect()) } - TypeType::Concrete(&MetaType::Interface(InterfaceMeta { name: ref iface_name, .. })) => { + TypeType::Concrete(&MetaType::Interface(InterfaceMeta{name: ref iface_name, .. })) => { Some(schema.concrete_type_list() .iter() .filter_map(|&ct| - if let MetaType::Object(ObjectMeta { ref name, ref interface_names, .. }) = *ct { + if let MetaType::Object(ObjectMeta{ + ref name, + ref interface_names, + .. + }) = *ct { if interface_names.contains(&iface_name.to_string()) { schema.type_by_name(name) } else { None } @@ -232,7 +236,6 @@ graphql_object!(EnumValue: () as "__EnumValue" |&self| { } }); - graphql_object!(<'a> DirectiveType<'a>: SchemaType<'a> as "__Directive" |&self| { field name() -> &String { &self.name @@ -270,4 +273,3 @@ graphql_object!(<'a> DirectiveType<'a>: SchemaType<'a> as "__Directive" |&self| self.locations.contains(&DirectiveLocation::Field) } }); - diff --git a/juniper/src/tests/model.rs b/juniper/src/tests/model.rs index b0be619c..570b5d0c 100644 --- a/juniper/src/tests/model.rs +++ b/juniper/src/tests/model.rs @@ -5,8 +5,7 @@ use std::collections::HashMap; #[derive(GraphQLEnum, Copy, Clone, Eq, PartialEq, Debug)] #[graphql(_internal)] pub enum Episode { - #[graphql(name = "NEW_HOPE")] - NewHope, + #[graphql(name = "NEW_HOPE")] NewHope, Empire, Jedi, } diff --git a/juniper/src/tests/schema.rs b/juniper/src/tests/schema.rs index 0f32d266..86d2f6a5 100644 --- a/juniper/src/tests/schema.rs +++ b/juniper/src/tests/schema.rs @@ -83,7 +83,6 @@ graphql_object!(<'a> &'a Droid: Database as "Droid" |&self| { } }); - graphql_object!(Database: Database as "Query" |&self| { description: "The root query object of the schema" diff --git a/juniper/src/types/base.rs b/juniper/src/types/base.rs index ad5f3c2a..09e0e57f 100644 --- a/juniper/src/types/base.rs +++ b/juniper/src/types/base.rs @@ -328,7 +328,8 @@ fn resolve_selection_set_into<T, CtxT>( selection_set: &[Selection], executor: &Executor<CtxT>, result: &mut OrderMap<String, Value>, -) -> bool where +) -> bool +where T: GraphQLType<Context = CtxT>, { let meta_type = executor @@ -441,7 +442,8 @@ fn resolve_selection_set_into<T, CtxT>( let sub_exec = executor.type_sub_executor( fragment.type_condition.as_ref().map(|c| c.item), - Some(&fragment.selection_set[..])); + Some(&fragment.selection_set[..]), + ); if let Some(ref type_condition) = fragment.type_condition { let sub_result = instance.resolve_into_type( @@ -472,7 +474,7 @@ fn resolve_selection_set_into<T, CtxT>( } } } - + true } @@ -491,8 +493,8 @@ fn is_excluded(directives: &Option<Vec<Spanning<Directive>>>, vars: &Variables) .next() .unwrap(); - if (directive.name.item == "skip" && condition) || - (directive.name.item == "include" && !condition) + if (directive.name.item == "skip" && condition) + || (directive.name.item == "include" && !condition) { return true; } diff --git a/juniper/src/types/containers.rs b/juniper/src/types/containers.rs index c475b10c..94c01bb3 100644 --- a/juniper/src/types/containers.rs +++ b/juniper/src/types/containers.rs @@ -152,9 +152,15 @@ where } } -fn resolve_into_list<T: GraphQLType, I: Iterator<Item=T>>(executor: &Executor<T::Context>, info: &T::TypeInfo, iter: I) -> Value { - let stop_on_null = executor.current_type() - .list_contents().expect("Current type is not a list type") +fn resolve_into_list<T: GraphQLType, I: Iterator<Item = T>>( + executor: &Executor<T::Context>, + info: &T::TypeInfo, + iter: I, +) -> Value { + let stop_on_null = executor + .current_type() + .list_contents() + .expect("Current type is not a list type") .is_non_null(); let mut result = Vec::new(); @@ -169,4 +175,4 @@ fn resolve_into_list<T: GraphQLType, I: Iterator<Item=T>>(executor: &Executor<T: } Value::list(result) -} \ No newline at end of file +} diff --git a/juniper/src/types/scalars.rs b/juniper/src/types/scalars.rs index 48c23756..9ebbbf61 100644 --- a/juniper/src/types/scalars.rs +++ b/juniper/src/types/scalars.rs @@ -44,7 +44,6 @@ graphql_scalar!(ID as "ID" { } }); - graphql_scalar!(String as "String" { resolve(&self) -> Value { Value::string(self) @@ -58,7 +57,6 @@ graphql_scalar!(String as "String" { } }); - impl<'a> GraphQLType for &'a str { type Context = (); type TypeInfo = (); @@ -82,8 +80,6 @@ impl<'a> ToInputValue for &'a str { } } - - graphql_scalar!(bool as "Boolean" { resolve(&self) -> Value { Value::boolean(*self) @@ -97,7 +93,6 @@ graphql_scalar!(bool as "Boolean" { } }); - graphql_scalar!(i32 as "Int" { resolve(&self) -> Value { Value::int(*self) @@ -111,7 +106,6 @@ graphql_scalar!(i32 as "Int" { } }); - graphql_scalar!(f64 as "Float" { resolve(&self) -> Value { Value::float(*self) @@ -126,7 +120,6 @@ graphql_scalar!(f64 as "Float" { } }); - impl GraphQLType for () { type Context = (); type TypeInfo = (); @@ -146,7 +139,6 @@ impl FromInputValue for () { } } - /// Utility type to define read-only schemas /// /// If you instantiate `RootNode` with this as the mutation, no mutation will be diff --git a/juniper/src/types/utilities.rs b/juniper/src/types/utilities.rs index 71a69374..0638e0e5 100644 --- a/juniper/src/types/utilities.rs +++ b/juniper/src/types/utilities.rs @@ -31,26 +31,29 @@ pub fn is_valid_literal_value( match *arg_value { InputValue::Null | InputValue::Variable(_) => true, - ref v @ InputValue::Int(_) | - ref v @ InputValue::Float(_) | - ref v @ InputValue::String(_) | - ref v @ InputValue::Boolean(_) | - ref v @ InputValue::Enum(_) => if let Some(parse_fn) = t.input_value_parse_fn() { + ref v @ InputValue::Int(_) + | ref v @ InputValue::Float(_) + | ref v @ InputValue::String(_) + | ref v @ InputValue::Boolean(_) + | ref v @ InputValue::Enum(_) => if let Some(parse_fn) = t.input_value_parse_fn() { parse_fn(v) } else { false }, InputValue::List(_) => false, InputValue::Object(ref obj) => if let MetaType::InputObject(InputObjectMeta { - ref input_fields, .. + ref input_fields, + .. }) = *t { let mut remaining_required_fields = input_fields .iter() - .filter_map(|f| if f.arg_type.is_non_null() { - Some(&f.name) - } else { - None + .filter_map(|f| { + if f.arg_type.is_non_null() { + Some(&f.name) + } else { + None + } }) .collect::<HashSet<_>>(); diff --git a/juniper/src/validation/input_value.rs b/juniper/src/validation/input_value.rs index 52cc00d3..377a932b 100644 --- a/juniper/src/validation/input_value.rs +++ b/juniper/src/validation/input_value.rs @@ -277,9 +277,7 @@ fn push_unification_error<'a>( errors.push(RuleError::new( &format!( r#"Variable "${}" got invalid value. {}{}."#, - var_name, - path, - message, + var_name, path, message, ), &[var_pos.clone()], )); diff --git a/juniper/src/validation/rules/arguments_of_correct_type.rs b/juniper/src/validation/rules/arguments_of_correct_type.rs index e94af54f..b26e972d 100644 --- a/juniper/src/validation/rules/arguments_of_correct_type.rs +++ b/juniper/src/validation/rules/arguments_of_correct_type.rs @@ -60,12 +60,10 @@ impl<'a> Visitor<'a> for ArgumentsOfCorrectType<'a> { fn error_message(arg_name: &str, type_name: &str) -> String { format!( "Invalid value for argument \"{}\", expected type \"{}\"", - arg_name, - type_name + arg_name, type_name ) } - #[cfg(test)] mod tests { use super::{error_message, factory}; diff --git a/juniper/src/validation/rules/default_values_of_correct_type.rs b/juniper/src/validation/rules/default_values_of_correct_type.rs index cbb8c71b..e8d76337 100644 --- a/juniper/src/validation/rules/default_values_of_correct_type.rs +++ b/juniper/src/validation/rules/default_values_of_correct_type.rs @@ -43,16 +43,14 @@ impl<'a> Visitor<'a> for DefaultValuesOfCorrectType { fn type_error_message(arg_name: &str, type_name: &str) -> String { format!( "Invalid default value for argument \"{}\", expected type \"{}\"", - arg_name, - type_name + arg_name, type_name ) } fn non_null_error_message(arg_name: &str, type_name: &str) -> String { format!( "Argument \"{}\" has type \"{}\" and is not nullable, so it't can't have a default value", - arg_name, - type_name + arg_name, type_name ) } diff --git a/juniper/src/validation/rules/fields_on_correct_type.rs b/juniper/src/validation/rules/fields_on_correct_type.rs index d2918915..9873417a 100644 --- a/juniper/src/validation/rules/fields_on_correct_type.rs +++ b/juniper/src/validation/rules/fields_on_correct_type.rs @@ -17,7 +17,6 @@ impl<'a> Visitor<'a> for FieldsOnCorrectType { let type_name = parent_type.name().unwrap_or("<unknown>"); if parent_type.field_by_name(field_name.item).is_none() { - match *parent_type { MetaType::Union(..) => { // You can query for `__typename` on a union, diff --git a/juniper/src/validation/rules/fragments_on_composite_types.rs b/juniper/src/validation/rules/fragments_on_composite_types.rs index 9e03c4c2..5b113d19 100644 --- a/juniper/src/validation/rules/fragments_on_composite_types.rs +++ b/juniper/src/validation/rules/fragments_on_composite_types.rs @@ -55,8 +55,7 @@ fn error_message(fragment_name: Option<&str>, on_type: &str) -> String { if let Some(name) = fragment_name { format!( r#"Fragment "{}" cannot condition non composite type "{}"#, - name, - on_type + name, on_type ) } else { format!( diff --git a/juniper/src/validation/rules/known_argument_names.rs b/juniper/src/validation/rules/known_argument_names.rs index 039c3cbd..7b77e713 100644 --- a/juniper/src/validation/rules/known_argument_names.rs +++ b/juniper/src/validation/rules/known_argument_names.rs @@ -23,14 +23,14 @@ impl<'a> Visitor<'a> for KnownArgumentNames<'a> { ctx: &mut ValidatorContext<'a>, directive: &'a Spanning<Directive>, ) { - self.current_args = ctx.schema.directive_by_name(directive.item.name.item).map( - |d| { + self.current_args = ctx.schema + .directive_by_name(directive.item.name.item) + .map(|d| { ( ArgumentPosition::Directive(directive.item.name.item), &d.arguments, ) - }, - ); + }); } fn exit_directive(&mut self, _: &mut ValidatorContext<'a>, _: &'a Spanning<Directive>) { @@ -84,17 +84,14 @@ impl<'a> Visitor<'a> for KnownArgumentNames<'a> { fn field_error_message(arg_name: &str, field_name: &str, type_name: &str) -> String { format!( r#"Unknown argument "{}" on field "{}" of type "{}""#, - arg_name, - field_name, - type_name + arg_name, field_name, type_name ) } fn directive_error_message(arg_name: &str, directive_name: &str) -> String { format!( r#"Unknown argument "{}" on directive "{}""#, - arg_name, - directive_name + arg_name, directive_name ) } diff --git a/juniper/src/validation/rules/known_directives.rs b/juniper/src/validation/rules/known_directives.rs index 951fd38c..2c06b8f0 100644 --- a/juniper/src/validation/rules/known_directives.rs +++ b/juniper/src/validation/rules/known_directives.rs @@ -132,8 +132,7 @@ fn unknown_error_message(directive_name: &str) -> String { fn misplaced_error_message(directive_name: &str, location: &DirectiveLocation) -> String { format!( r#"Directive "{}" may not be used on {}"#, - directive_name, - location + directive_name, location ) } diff --git a/juniper/src/validation/rules/no_undefined_variables.rs b/juniper/src/validation/rules/no_undefined_variables.rs index 46f10baf..2b00d3c4 100644 --- a/juniper/src/validation/rules/no_undefined_variables.rs +++ b/juniper/src/validation/rules/no_undefined_variables.rs @@ -150,8 +150,7 @@ fn error_message(var_name: &str, op_name: Option<&str>) -> String { if let Some(op_name) = op_name { format!( r#"Variable "${}" is not defined by operation "{}""#, - var_name, - op_name + var_name, op_name ) } else { format!(r#"Variable "${}" is not defined"#, var_name) diff --git a/juniper/src/validation/rules/no_unused_variables.rs b/juniper/src/validation/rules/no_unused_variables.rs index c48c1dba..7573f9da 100644 --- a/juniper/src/validation/rules/no_unused_variables.rs +++ b/juniper/src/validation/rules/no_unused_variables.rs @@ -140,8 +140,7 @@ fn error_message(var_name: &str, op_name: Option<&str>) -> String { if let Some(op_name) = op_name { format!( r#"Variable "${}" is not defined by operation "{}""#, - var_name, - op_name + var_name, op_name ) } else { format!(r#"Variable "${}" is not defined"#, var_name) diff --git a/juniper/src/validation/rules/overlapping_fields_can_be_merged.rs b/juniper/src/validation/rules/overlapping_fields_can_be_merged.rs index b3696fa1..9920440f 100644 --- a/juniper/src/validation/rules/overlapping_fields_can_be_merged.rs +++ b/juniper/src/validation/rules/overlapping_fields_can_be_merged.rs @@ -204,18 +204,21 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { }; { - if self.compared_fragments - .borrow() - .contains(fragment_name1, fragment_name2, mutually_exclusive) - { + if self.compared_fragments.borrow().contains( + fragment_name1, + fragment_name2, + mutually_exclusive, + ) { return; } } { - self.compared_fragments - .borrow_mut() - .insert(fragment_name1, fragment_name2, mutually_exclusive); + self.compared_fragments.borrow_mut().insert( + fragment_name1, + fragment_name2, + mutually_exclusive, + ); } let (field_map1, fragment_names1) = @@ -338,9 +341,9 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { let AstAndDef(ref parent_type1, ast1, ref def1) = *field1; let AstAndDef(ref parent_type2, ast2, ref def2) = *field2; - let mutually_exclusive = parents_mutually_exclusive || - (parent_type1 != parent_type2 && self.is_object_type(ctx, *parent_type1) && - self.is_object_type(ctx, *parent_type2)); + let mutually_exclusive = parents_mutually_exclusive + || (parent_type1 != parent_type2 && self.is_object_type(ctx, *parent_type1) + && self.is_object_type(ctx, *parent_type2)); if !mutually_exclusive { let name1 = &ast1.item.name.item; @@ -350,9 +353,10 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { return Some(Conflict( ConflictReason( response_name.to_owned(), - ConflictReasonMessage::Message( - format!("{} and {} are different fields", name1, name2), - ), + ConflictReasonMessage::Message(format!( + "{} and {} are different fields", + name1, name2 + )), ), vec![ast1.start.clone()], vec![ast2.start.clone()], @@ -379,9 +383,10 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { return Some(Conflict( ConflictReason( response_name.to_owned(), - ConflictReasonMessage::Message( - format!("they return conflicting types {} and {}", t1, t2), - ), + ConflictReasonMessage::Message(format!( + "they return conflicting types {} and {}", + t1, t2 + )), ), vec![ast1.start.clone()], vec![ast2.start.clone()], @@ -389,8 +394,7 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { } } - if let (&Some(ref s1), &Some(ref s2)) = - (&ast1.item.selection_set, &ast2.item.selection_set) + if let (&Some(ref s1), &Some(ref s2)) = (&ast1.item.selection_set, &ast2.item.selection_set) { let conflicts = self.find_conflicts_between_sub_selection_sets( mutually_exclusive, @@ -506,17 +510,17 @@ impl<'a> OverlappingFieldsCanBeMerged<'a> { fn is_type_conflict(&self, ctx: &ValidatorContext<'a>, t1: &Type, t2: &Type) -> bool { match (t1, t2) { - (&Type::List(ref inner1), &Type::List(ref inner2)) | - (&Type::NonNullList(ref inner1), &Type::NonNullList(ref inner2)) => { + (&Type::List(ref inner1), &Type::List(ref inner2)) + | (&Type::NonNullList(ref inner1), &Type::NonNullList(ref inner2)) => { self.is_type_conflict(ctx, inner1, inner2) } - (&Type::NonNullNamed(ref n1), &Type::NonNullNamed(ref n2)) | - (&Type::Named(ref n1), &Type::Named(ref n2)) => { + (&Type::NonNullNamed(ref n1), &Type::NonNullNamed(ref n2)) + | (&Type::Named(ref n1), &Type::Named(ref n2)) => { let ct1 = ctx.schema.concrete_type_by_name(n1); let ct2 = ctx.schema.concrete_type_by_name(n2); - if ct1.map(|ct| ct.is_leaf()).unwrap_or(false) || - ct2.map(|ct| ct.is_leaf()).unwrap_or(false) + if ct1.map(|ct| ct.is_leaf()).unwrap_or(false) + || ct2.map(|ct| ct.is_leaf()).unwrap_or(false) { n1 != n2 } else { @@ -1755,9 +1759,7 @@ mod tests { RuleError::new( &error_message( "scalar", - &Message( - "they return conflicting types String! and String".to_owned(), - ), + &Message("they return conflicting types String! and String".to_owned()), ), &[ SourcePosition::new(100, 4, 18), diff --git a/juniper/src/validation/rules/possible_fragment_spreads.rs b/juniper/src/validation/rules/possible_fragment_spreads.rs index 899c2dc3..baa5d7bb 100644 --- a/juniper/src/validation/rules/possible_fragment_spreads.rs +++ b/juniper/src/validation/rules/possible_fragment_spreads.rs @@ -78,16 +78,13 @@ fn error_message(frag_name: Option<&str>, parent_type_name: &str, frag_type: &st format!( "Fragment \"{}\" cannot be spread here as objects of type \ \"{}\" can never be of type \"{}\"", - frag_name, - parent_type_name, - frag_type + frag_name, parent_type_name, frag_type ) } else { format!( "Fragment cannot be spread here as objects of type \"{}\" \ can never be of type \"{}\"", - parent_type_name, - frag_type + parent_type_name, frag_type ) } } diff --git a/juniper/src/validation/rules/provided_non_null_arguments.rs b/juniper/src/validation/rules/provided_non_null_arguments.rs index 641f861c..f7575f9f 100644 --- a/juniper/src/validation/rules/provided_non_null_arguments.rs +++ b/juniper/src/validation/rules/provided_non_null_arguments.rs @@ -20,8 +20,8 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { }) = ctx.parent_type().and_then(|t| t.field_by_name(field_name)) { for meta_arg in meta_args { - if meta_arg.arg_type.is_non_null() && - field + if meta_arg.arg_type.is_non_null() + && field .item .arguments .as_ref() @@ -54,8 +54,8 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { }) = ctx.schema.directive_by_name(directive_name) { for meta_arg in meta_args { - if meta_arg.arg_type.is_non_null() && - directive + if meta_arg.arg_type.is_non_null() + && directive .item .arguments .as_ref() @@ -79,18 +79,14 @@ impl<'a> Visitor<'a> for ProvidedNonNullArguments { fn field_error_message(field_name: &str, arg_name: &str, type_name: &str) -> String { format!( r#"Field "{}" argument "{}" of type "{}" is required but not provided"#, - field_name, - arg_name, - type_name + field_name, arg_name, type_name ) } fn directive_error_message(directive_name: &str, arg_name: &str, type_name: &str) -> String { format!( r#"Directive "@{}" argument "{}" of type "{}" is required but not provided"#, - directive_name, - arg_name, - type_name + directive_name, arg_name, type_name ) } diff --git a/juniper/src/validation/rules/scalar_leafs.rs b/juniper/src/validation/rules/scalar_leafs.rs index 905426ed..3311996e 100644 --- a/juniper/src/validation/rules/scalar_leafs.rs +++ b/juniper/src/validation/rules/scalar_leafs.rs @@ -39,8 +39,7 @@ impl<'a> Visitor<'a> for ScalarLeafs { fn no_allowed_error_message(field_name: &str, type_name: &str) -> String { format!( r#"Field "{}" must not have a selection since type {} has no subfields"#, - field_name, - type_name + field_name, type_name ) } diff --git a/juniper/src/validation/rules/variables_are_input_types.rs b/juniper/src/validation/rules/variables_are_input_types.rs index 0c99e6db..c5837609 100644 --- a/juniper/src/validation/rules/variables_are_input_types.rs +++ b/juniper/src/validation/rules/variables_are_input_types.rs @@ -30,8 +30,7 @@ impl<'a> Visitor<'a> for UniqueVariableNames { fn error_message(var_name: &str, type_name: &str) -> String { format!( "Variable \"{}\" cannot be of non-input type \"{}\"", - var_name, - type_name + var_name, type_name ) } diff --git a/juniper/src/validation/rules/variables_in_allowed_position.rs b/juniper/src/validation/rules/variables_in_allowed_position.rs index 73fb5c97..38a8f11c 100644 --- a/juniper/src/validation/rules/variables_in_allowed_position.rs +++ b/juniper/src/validation/rules/variables_in_allowed_position.rs @@ -148,9 +148,7 @@ impl<'a> Visitor<'a> for VariableInAllowedPosition<'a> { fn error_message(var_name: &str, type_name: &str, expected_type_name: &str) -> String { format!( "Variable \"{}\" of type \"{}\" used in position expecting type \"{}\"", - var_name, - type_name, - expected_type_name + var_name, type_name, expected_type_name ) } diff --git a/juniper/src/validation/test_harness.rs b/juniper/src/validation/test_harness.rs index 4e3ace0e..1ba848c7 100644 --- a/juniper/src/validation/test_harness.rs +++ b/juniper/src/validation/test_harness.rs @@ -236,10 +236,7 @@ impl GraphQLType for Cat { registry .build_object_type::<Self>(i, fields) - .interfaces(&[ - registry.get_type::<Being>(i), - registry.get_type::<Pet>(i), - ]) + .interfaces(&[registry.get_type::<Being>(i), registry.get_type::<Pet>(i)]) .into_meta() } } @@ -434,9 +431,7 @@ impl GraphQLType for ComplicatedArgs { .argument(registry.arg::<Option<ID>>("idArg", i)), registry .field::<Option<String>>("stringListArgField", i) - .argument( - registry.arg::<Option<Vec<Option<String>>>>("stringListArg", i), - ), + .argument(registry.arg::<Option<Vec<Option<String>>>>("stringListArg", i)), registry .field::<Option<String>>("complexArgField", i) .argument(registry.arg::<Option<ComplexInput>>("complexArg", i)), diff --git a/juniper/src/validation/traits.rs b/juniper/src/validation/traits.rs index 7b9727be..66c021d6 100644 --- a/juniper/src/validation/traits.rs +++ b/juniper/src/validation/traits.rs @@ -3,7 +3,6 @@ use ast::{Directive, Document, Field, Fragment, FragmentSpread, InlineFragment, use parser::Spanning; use validation::ValidatorContext; - #[doc(hidden)] pub trait Visitor<'a> { fn enter_document(&mut self, _: &mut ValidatorContext<'a>, _: &'a Document) {} diff --git a/juniper/src/validation/visitor.rs b/juniper/src/validation/visitor.rs index 36b97c6c..884ebc94 100644 --- a/juniper/src/validation/visitor.rs +++ b/juniper/src/validation/visitor.rs @@ -22,26 +22,29 @@ fn visit_definitions<'a, V: Visitor<'a>>( for def in d { let def_type = match *def { Definition::Fragment(Spanning { - item: Fragment { - type_condition: Spanning { item: name, .. }, - .. - }, + item: + Fragment { + type_condition: Spanning { item: name, .. }, + .. + }, .. }) => Some(Type::NonNullNamed(Cow::Borrowed(name))), Definition::Operation(Spanning { - item: Operation { - operation_type: OperationType::Query, - .. - }, + item: + Operation { + operation_type: OperationType::Query, + .. + }, .. }) => Some(Type::NonNullNamed(Cow::Borrowed( ctx.schema.concrete_query_type().name().unwrap(), ))), Definition::Operation(Spanning { - item: Operation { - operation_type: OperationType::Mutation, - .. - }, + item: + Operation { + operation_type: OperationType::Mutation, + .. + }, .. }) => ctx.schema .concrete_mutation_type() @@ -284,8 +287,10 @@ fn visit_input_value<'a, V: Visitor<'a>>( _ => None, }); - ctx.with_pushed_input_type(inner_type.as_ref(), |ctx| for value in ls { - visit_input_value(v, ctx, value); + ctx.with_pushed_input_type(inner_type.as_ref(), |ctx| { + for value in ls { + visit_input_value(v, ctx, value); + } }) } _ => (), diff --git a/juniper/src/value.rs b/juniper/src/value.rs index 7c61efba..250fbe53 100644 --- a/juniper/src/value.rs +++ b/juniper/src/value.rs @@ -125,13 +125,18 @@ impl ToInputValue for Value { Value::Float(f) => InputValue::Float(f), Value::String(ref s) => InputValue::String(s.clone()), Value::Boolean(b) => InputValue::Boolean(b), - Value::List(ref l) => { - InputValue::List(l.iter().map(|x| Spanning::unlocated(x.to_input_value())).collect()) - } + Value::List(ref l) => InputValue::List( + l.iter() + .map(|x| Spanning::unlocated(x.to_input_value())) + .collect(), + ), Value::Object(ref o) => InputValue::Object( o.iter() .map(|(k, v)| { - (Spanning::unlocated(k.clone()), Spanning::unlocated(v.to_input_value())) + ( + Spanning::unlocated(k.clone()), + Spanning::unlocated(v.to_input_value()), + ) }) .collect(), ), @@ -169,11 +174,14 @@ impl From<f64> for Value { } } -impl<T> From<Option<T>> for Value where Value: From<T> { +impl<T> From<Option<T>> for Value +where + Value: From<T>, +{ fn from(v: Option<T>) -> Value { match v { Some(v) => Value::from(v), - None => Value::null() + None => Value::null(), } } } @@ -215,52 +223,34 @@ mod tests { #[test] fn value_macro_string() { - assert_eq!( - graphql_value!("test"), - Value::string("test") - ); + assert_eq!(graphql_value!("test"), Value::string("test")); } #[test] fn value_macro_int() { - assert_eq!( - graphql_value!(123), - Value::int(123) - ); + assert_eq!(graphql_value!(123), Value::int(123)); } #[test] fn value_macro_float() { - assert_eq!( - graphql_value!(123.5), - Value::float(123.5) - ); + assert_eq!(graphql_value!(123.5), Value::float(123.5)); } #[test] fn value_macro_boolean() { - assert_eq!( - graphql_value!(false), - Value::boolean(false) - ); + assert_eq!(graphql_value!(false), Value::boolean(false)); } #[test] fn value_macro_option() { - assert_eq!( - graphql_value!(Some("test")), - Value::string("test") - ); - assert_eq!( - graphql_value!(None), - Value::null() - ); + assert_eq!(graphql_value!(Some("test")), Value::string("test")); + assert_eq!(graphql_value!(None), Value::null()); } #[test] fn value_macro_list() { assert_eq!( - graphql_value!([ 123, "Test", false ]), + graphql_value!([123, "Test", false]), Value::list(vec![ Value::int(123), Value::string("Test"), @@ -268,10 +258,10 @@ mod tests { ]) ); assert_eq!( - graphql_value!([ 123, [ 456 ], 789 ]), + graphql_value!([123, [456], 789]), Value::list(vec![ Value::int(123), - Value::list(vec![ Value::int(456) ]), + Value::list(vec![Value::int(456)]), Value::int(789), ]) ); @@ -281,10 +271,11 @@ mod tests { fn value_macro_object() { assert_eq!( graphql_value!({ "key": 123, "next": true }), - Value::object(vec![ - ("key", Value::int(123)), - ("next", Value::boolean(true)), - ].into_iter().collect()) + Value::object( + vec![("key", Value::int(123)), ("next", Value::boolean(true))] + .into_iter() + .collect() + ) ); } } diff --git a/juniper_codegen/src/derive_enum.rs b/juniper_codegen/src/derive_enum.rs index 934f1de5..d22fb999 100644 --- a/juniper_codegen/src/derive_enum.rs +++ b/juniper_codegen/src/derive_enum.rs @@ -4,7 +4,6 @@ use quote::Tokens; use util::*; - #[derive(Default, Debug)] struct EnumAttrs { name: Option<String>, @@ -14,7 +13,7 @@ struct EnumAttrs { impl EnumAttrs { fn from_input(input: &DeriveInput) -> EnumAttrs { - let mut res = EnumAttrs{ + let mut res = EnumAttrs { name: None, description: None, /// Flag to specify whether the calling crate is the "juniper" crate itself. @@ -38,8 +37,8 @@ impl EnumAttrs { res.internal = true; continue; } - }, - _ => {}, + } + _ => {} } panic!(format!( "Unknown attribute for #[derive(GraphQLEnum)]: {:?}", @@ -87,7 +86,6 @@ impl EnumVariantAttrs { } } - pub fn impl_enum(ast: &syn::DeriveInput) -> Tokens { let variants = match ast.body { Body::Enum(ref var) => var, @@ -171,7 +169,9 @@ pub fn impl_enum(ast: &syn::DeriveInput) -> Tokens { Some(#name) } - fn meta<'r>(_: &(), registry: &mut _juniper::Registry<'r>) -> _juniper::meta::MetaType<'r> { + fn meta<'r>(_: &(), registry: &mut _juniper::Registry<'r>) + -> _juniper::meta::MetaType<'r> + { let meta = registry.build_enum_type::<#ident>(&(), &[ #(#values)* ]); @@ -179,7 +179,12 @@ pub fn impl_enum(ast: &syn::DeriveInput) -> Tokens { meta.into_meta() } - fn resolve(&self, _: &(), _: Option<&[_juniper::Selection]>, _: &_juniper::Executor<Self::Context>) -> _juniper::Value { + fn resolve( + &self, + _: &(), + _: Option<&[_juniper::Selection]>, + _: &_juniper::Executor<Self::Context> + ) -> _juniper::Value { match self { #(#resolves)* } diff --git a/juniper_codegen/src/derive_input_object.rs b/juniper_codegen/src/derive_input_object.rs index 47f5018d..95dce59e 100644 --- a/juniper_codegen/src/derive_input_object.rs +++ b/juniper_codegen/src/derive_input_object.rs @@ -4,7 +4,6 @@ use quote::Tokens; use util::*; - #[derive(Default, Debug)] struct ObjAttrs { name: Option<String>, @@ -33,8 +32,8 @@ impl ObjAttrs { res.internal = true; continue; } - }, - _ => {}, + } + _ => {} } panic!(format!( "Unknown attribute for #[derive(GraphQLInputObject)]: {:?}", @@ -80,7 +79,7 @@ impl ObjFieldAttrs { continue; } } - _ => {}, + _ => {} } panic!(format!( "Unknown attribute for #[derive(GraphQLInputObject)]: {:?}", @@ -144,7 +143,7 @@ pub fn impl_input_object(ast: &syn::DeriveInput) -> Tokens { let default = { if field_attrs.default { - Some(quote! { Default::default() } ) + Some(quote! { Default::default() }) } else { match field_attrs.default_expr { Some(ref def) => match syn::parse_token_trees(def) { @@ -221,7 +220,10 @@ pub fn impl_input_object(ast: &syn::DeriveInput) -> Tokens { Some(#name) } - fn meta<'r>(_: &(), registry: &mut _juniper::Registry<'r>) -> _juniper::meta::MetaType<'r> { + fn meta<'r>( + _: &(), + registry: &mut _juniper::Registry<'r> + ) -> _juniper::meta::MetaType<'r> { let fields = &[ #(#meta_fields)* ]; diff --git a/juniper_codegen/src/derive_object.rs b/juniper_codegen/src/derive_object.rs index 2a4e2ff2..dacc90ec 100644 --- a/juniper_codegen/src/derive_object.rs +++ b/juniper_codegen/src/derive_object.rs @@ -135,7 +135,6 @@ pub fn impl_object(ast: &syn::DeriveInput) -> Tokens { // Build from_input clause. - let resolver = quote!{ #name => executor.resolve_with_ctx(&(), &self.#field_ident), }; @@ -155,7 +154,10 @@ pub fn impl_object(ast: &syn::DeriveInput) -> Tokens { #name.to_string() } - fn meta<'r>(_: &(), registry: &mut ::juniper::Registry<'r>) -> ::juniper::meta::MetaType<'r> { + fn meta<'r>( + _: &(), + registry: &mut ::juniper::Registry<'r> + ) -> ::juniper::meta::MetaType<'r> { let fields = &[ #(#meta_fields)* ]; @@ -164,8 +166,13 @@ pub fn impl_object(ast: &syn::DeriveInput) -> Tokens { builder.into_meta() } - fn resolve_field(&self, _: &(), field_name: &str, _: &::juniper::Arguments, executor: &::juniper::Executor<Self::Context>) - -> ::juniper::ExecutionResult + fn resolve_field( + &self, + _: &(), + field_name: &str, + _: &::juniper::Arguments, + executor: &::juniper::Executor<Self::Context> + ) -> ::juniper::ExecutionResult { match field_name { diff --git a/juniper_codegen/src/lib.rs b/juniper_codegen/src/lib.rs index 301db226..8c124901 100644 --- a/juniper_codegen/src/lib.rs +++ b/juniper_codegen/src/lib.rs @@ -7,9 +7,9 @@ #![recursion_limit = "1024"] extern crate proc_macro; -extern crate syn; #[macro_use] extern crate quote; +extern crate syn; mod util; mod derive_enum; diff --git a/juniper_codegen/src/util.rs b/juniper_codegen/src/util.rs index 9ae094c2..d22b741d 100644 --- a/juniper_codegen/src/util.rs +++ b/juniper_codegen/src/util.rs @@ -87,8 +87,7 @@ pub(crate) fn to_upper_snake_case(s: &str) -> String { for c in s.chars() { if c == '_' { last_lower = false; - } - else if c.is_lowercase() { + } else if c.is_lowercase() { last_lower = true; } else if c.is_uppercase() { if last_lower { diff --git a/juniper_iron/examples/iron_server.rs b/juniper_iron/examples/iron_server.rs index 9fa4f0ab..31a3324c 100644 --- a/juniper_iron/examples/iron_server.rs +++ b/juniper_iron/examples/iron_server.rs @@ -1,9 +1,9 @@ extern crate iron; -extern crate mount; -extern crate logger; -extern crate serde; extern crate juniper; extern crate juniper_iron; +extern crate logger; +extern crate mount; +extern crate serde; use std::env; diff --git a/juniper_iron/src/lib.rs b/juniper_iron/src/lib.rs index 9cf4ed7c..f464d54b 100644 --- a/juniper_iron/src/lib.rs +++ b/juniper_iron/src/lib.rs @@ -101,13 +101,13 @@ supported. */ -extern crate serde_json; -extern crate juniper; -extern crate urlencoded; #[macro_use] extern crate iron; #[cfg(test)] extern crate iron_test; +extern crate juniper; +extern crate serde_json; +extern crate urlencoded; use iron::prelude::*; use iron::middleware::Handler; @@ -151,14 +151,11 @@ pub struct GraphiQLHandler { graphql_url: String, } - fn get_single_value<T>(mut values: Vec<T>) -> IronResult<T> { if values.len() == 1 { Ok(values.remove(0)) } else { - Err( - GraphQLIronError::InvalidData("Duplicate URL query parameter").into(), - ) + Err(GraphQLIronError::InvalidData("Duplicate URL query parameter").into()) } } @@ -172,22 +169,22 @@ fn parse_url_param(params: Option<Vec<String>>) -> IronResult<Option<String>> { fn parse_variable_param(params: Option<Vec<String>>) -> IronResult<Option<InputValue>> { if let Some(values) = params { - Ok(serde_json::from_str::<InputValue>( - get_single_value(values)?.as_ref(), - ).map(Some) - .map_err(GraphQLIronError::Serde)?) + Ok( + serde_json::from_str::<InputValue>(get_single_value(values)?.as_ref()) + .map(Some) + .map_err(GraphQLIronError::Serde)?, + ) } else { Ok(None) } } - impl<'a, CtxFactory, Query, Mutation, CtxT> GraphQLHandler<'a, CtxFactory, Query, Mutation, CtxT> where CtxFactory: Fn(&mut Request) -> CtxT + Send + Sync + 'static, CtxT: 'static, - Query: GraphQLType<Context = CtxT, TypeInfo=()> + Send + Sync + 'static, - Mutation: GraphQLType<Context = CtxT, TypeInfo=()> + Send + Sync + 'static, + Query: GraphQLType<Context = CtxT, TypeInfo = ()> + Send + Sync + 'static, + Mutation: GraphQLType<Context = CtxT, TypeInfo = ()> + Send + Sync + 'static, { /// Build a new GraphQL handler /// @@ -202,7 +199,6 @@ where } } - fn handle_get(&self, req: &mut Request) -> IronResult<http::GraphQLRequest> { let url_query_string = req.get_mut::<UrlEncodedQuery>() .map_err(|e| GraphQLIronError::Url(e))?; @@ -223,9 +219,10 @@ where let mut request_payload = String::new(); itry!(req.body.read_to_string(&mut request_payload)); - Ok(serde_json::from_str::<http::GraphQLRequest>( - request_payload.as_str(), - ).map_err(|err| GraphQLIronError::Serde(err))?) + Ok( + serde_json::from_str::<http::GraphQLRequest>(request_payload.as_str()) + .map_err(|err| GraphQLIronError::Serde(err))?, + ) } fn execute(&self, context: &CtxT, request: http::GraphQLRequest) -> IronResult<Response> { @@ -258,8 +255,8 @@ impl<'a, CtxFactory, Query, Mutation, CtxT> Handler where CtxFactory: Fn(&mut Request) -> CtxT + Send + Sync + 'static, CtxT: 'static, - Query: GraphQLType<Context = CtxT, TypeInfo=()> + Send + Sync + 'static, - Mutation: GraphQLType<Context = CtxT, TypeInfo=()> + Send + Sync + 'static, + Query: GraphQLType<Context = CtxT, TypeInfo = ()> + Send + Sync + 'static, + Mutation: GraphQLType<Context = CtxT, TypeInfo = ()> + Send + Sync + 'static, 'a: 'static, { fn handle(&self, mut req: &mut Request) -> IronResult<Response> { diff --git a/juniper_rocket/examples/rocket_server.rs b/juniper_rocket/examples/rocket_server.rs index 82f42ea2..28dbb29d 100644 --- a/juniper_rocket/examples/rocket_server.rs +++ b/juniper_rocket/examples/rocket_server.rs @@ -1,9 +1,9 @@ #![feature(plugin)] #![plugin(rocket_codegen)] -extern crate rocket; extern crate juniper; extern crate juniper_rocket; +extern crate rocket; use rocket::response::content; use rocket::State; diff --git a/juniper_rocket/src/lib.rs b/juniper_rocket/src/lib.rs index 250c537c..15c8f4a5 100644 --- a/juniper_rocket/src/lib.rs +++ b/juniper_rocket/src/lib.rs @@ -40,8 +40,8 @@ Check the LICENSE file for details. #![plugin(rocket_codegen)] extern crate juniper; -extern crate serde_json; extern crate rocket; +extern crate serde_json; use std::io::{Cursor, Read}; use std::error::Error; @@ -123,9 +123,8 @@ impl<'f> FromForm<'f> for GraphQLRequest { } "operation_name" => { if operation_name.is_some() { - return Err( - "Operation name parameter must not occur more than once".to_owned(), - ); + return Err("Operation name parameter must not occur more than once" + .to_owned()); } else { match value.url_decode() { Ok(v) => operation_name = Some(v), @@ -135,20 +134,15 @@ impl<'f> FromForm<'f> for GraphQLRequest { } "variables" => { if variables.is_some() { - return Err( - "Variables parameter must not occur more than once".to_owned(), - ); + return Err("Variables parameter must not occur more than once".to_owned()); } else { let decoded; match value.url_decode() { Ok(v) => decoded = v, Err(e) => return Err(e.description().to_string()), } - variables = Some(serde_json::from_str::<InputValue>(&decoded).map_err( - |err| { - err.description().to_owned() - }, - )?); + variables = Some(serde_json::from_str::<InputValue>(&decoded) + .map_err(|err| err.description().to_owned())?); } } _ => { @@ -160,9 +154,11 @@ impl<'f> FromForm<'f> for GraphQLRequest { } if let Some(query) = query { - Ok(GraphQLRequest( - http::GraphQLRequest::new(query, operation_name, variables), - )) + Ok(GraphQLRequest(http::GraphQLRequest::new( + query, + operation_name, + variables, + ))) } else { Err("Query parameter missing".to_owned()) } @@ -193,13 +189,11 @@ impl<'r> Responder<'r> for GraphQLResponse { fn respond_to(self, _: &Request) -> Result<Response<'r>, Status> { let GraphQLResponse(status, body) = self; - Ok( - Response::build() - .header(ContentType::new("application", "json")) - .status(status) - .sized_body(Cursor::new(body)) - .finalize(), - ) + Ok(Response::build() + .header(ContentType::new("application", "json")) + .status(status) + .sized_body(Cursor::new(body)) + .finalize()) } } @@ -208,7 +202,7 @@ mod fromform_tests { use super::*; use std::str; use juniper::InputValue; - use rocket::request::{FromForm, FormItems}; + use rocket::request::{FormItems, FromForm}; fn check_error(input: &str, error: &str, strict: bool) { let mut items = FormItems::from(input); @@ -224,16 +218,16 @@ mod fromform_tests { #[test] fn test_no_query() { - check_error("operation_name=foo&variables={}", "Query parameter missing", false); + check_error( + "operation_name=foo&variables={}", + "Query parameter missing", + false, + ); } #[test] fn test_strict() { - check_error( - "query=test&foo=bar", - "Prohibited extra field \'foo\'", - true, - ); + check_error("query=test&foo=bar", "Prohibited extra field \'foo\'", true); } #[test] diff --git a/juniper_tests/src/codegen/derive_enum.rs b/juniper_tests/src/codegen/derive_enum.rs index ac31a53a..6277ce09 100644 --- a/juniper_tests/src/codegen/derive_enum.rs +++ b/juniper_tests/src/codegen/derive_enum.rs @@ -9,8 +9,7 @@ use juniper::{self, FromInputValue, GraphQLType, InputValue, ToInputValue}; enum SomeEnum { Regular, - #[graphql(name = "full", description = "field descr", deprecated = "depr")] - Full, + #[graphql(name = "full", description = "field descr", deprecated = "depr")] Full, } #[test] @@ -26,14 +25,20 @@ fn test_derived_enum() { assert_eq!(meta.description(), Some(&"enum descr".to_string())); // Test Regular variant. - assert_eq!(SomeEnum::Regular.to_input_value(), InputValue::String("REGULAR".into())); + assert_eq!( + SomeEnum::Regular.to_input_value(), + InputValue::String("REGULAR".into()) + ); assert_eq!( FromInputValue::from_input_value(&InputValue::String("REGULAR".into())), Some(SomeEnum::Regular) ); // Test FULL variant. - assert_eq!(SomeEnum::Full.to_input_value(), InputValue::String("full".into())); + assert_eq!( + SomeEnum::Full.to_input_value(), + InputValue::String("full".into()) + ); assert_eq!( FromInputValue::from_input_value(&InputValue::String("full".into())), Some(SomeEnum::Full) diff --git a/juniper_tests/src/codegen/derive_input_object.rs b/juniper_tests/src/codegen/derive_input_object.rs index caed94dd..d1d9e51d 100644 --- a/juniper_tests/src/codegen/derive_input_object.rs +++ b/juniper_tests/src/codegen/derive_input_object.rs @@ -8,11 +8,9 @@ use juniper::{self, FromInputValue, GraphQLType, InputValue}; #[graphql(name = "MyInput", description = "input descr")] struct Input { regular_field: String, - #[graphql(name = "haha", default = "33", description = "haha descr")] - c: i32, + #[graphql(name = "haha", default = "33", description = "haha descr")] c: i32, - #[graphql(default)] - other: Option<bool>, + #[graphql(default)] other: Option<bool>, } #[test] @@ -32,11 +30,14 @@ fn test_derived_input_object() { })).unwrap(); let output_no_defaults: Input = FromInputValue::from_input_value(&input_no_defaults).unwrap(); - assert_eq!(output_no_defaults, Input{ - regular_field: "a".into(), - c: 33, - other: None, - }); + assert_eq!( + output_no_defaults, + Input { + regular_field: "a".into(), + c: 33, + other: None, + } + ); // Test with all values supplied. @@ -47,9 +48,12 @@ fn test_derived_input_object() { })).unwrap(); let output: Input = FromInputValue::from_input_value(&input).unwrap(); - assert_eq!(output, Input{ - regular_field: "a".into(), - c: 55, - other: Some(true), - }); + assert_eq!( + output, + Input { + regular_field: "a".into(), + c: 55, + other: Some(true), + } + ); } diff --git a/juniper_tests/src/codegen/derive_object.rs b/juniper_tests/src/codegen/derive_object.rs index bc0428bc..06340d14 100644 --- a/juniper_tests/src/codegen/derive_object.rs +++ b/juniper_tests/src/codegen/derive_object.rs @@ -8,8 +8,7 @@ use juniper::{self, execute, EmptyMutation, GraphQLType, RootNode, Value, Variab #[graphql(name = "MyObj", description = "obj descr")] struct Obj { regular_field: bool, - #[graphql(name = "renamedField", description = "descr", deprecation = "field descr")] - c: i32, + #[graphql(name = "renamedField", description = "descr", deprecation = "field descr")] c: i32, } #[derive(GraphQLObject, Debug, PartialEq)] @@ -59,14 +58,26 @@ fn test_derived_object() { let schema = RootNode::new(Query, EmptyMutation::<()>::new()); assert_eq!( - execute(doc, None, &schema, &Variables::new(), &()), - Ok((Value::object(vec![ - ("obj", Value::object(vec![ - ("regularField", Value::boolean(true)), - ("renamedField", Value::int(22)), - ].into_iter().collect())), - ].into_iter().collect()), - vec![]))); + execute(doc, None, &schema, &Variables::new(), &()), + Ok(( + Value::object( + vec![ + ( + "obj", + Value::object( + vec![ + ("regularField", Value::boolean(true)), + ("renamedField", Value::int(22)), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + ), + vec![] + )) + ); } #[test] @@ -85,13 +96,31 @@ fn test_derived_object_nested() { assert_eq!( execute(doc, None, &schema, &Variables::new(), &()), - Ok((Value::object(vec![ - ("nested", Value::object(vec![ - ("obj", Value::object(vec![ - ("regularField", Value::boolean(false)), - ("renamedField", Value::int(333)), - ].into_iter().collect()) - )].into_iter().collect())), - ].into_iter().collect()), - vec![]))); + Ok(( + Value::object( + vec![ + ( + "nested", + Value::object( + vec![ + ( + "obj", + Value::object( + vec![ + ("regularField", Value::boolean(false)), + ("renamedField", Value::int(333)), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect(), + ), + ), + ].into_iter() + .collect() + ), + vec![] + )) + ); }