From e347f25718aefeb2e4a10416664f45c769930081 Mon Sep 17 00:00:00 2001
From: tyranron <tyranron@gmail.com>
Date: Wed, 8 Jun 2022 10:50:47 +0200
Subject: [PATCH] Refactor `vars!` macro position [skip ci]

---
 juniper/src/graphql/mod.rs                    |   3 +-
 juniper/src/lib.rs                            |   2 +-
 juniper/src/macros/mod.rs                     |   5 +-
 .../src/macros/{graphql_vars.rs => vars.rs}   | 158 +++++++++---------
 4 files changed, 86 insertions(+), 82 deletions(-)
 rename juniper/src/macros/{graphql_vars.rs => vars.rs} (81%)

diff --git a/juniper/src/graphql/mod.rs b/juniper/src/graphql/mod.rs
index 5b02afb9..1dfe2234 100644
--- a/juniper/src/graphql/mod.rs
+++ b/juniper/src/graphql/mod.rs
@@ -2,9 +2,10 @@ use crate::{behavior, resolve};
 
 pub use crate::{
     ast::InputValue,
-    macros::{input_value, value},
+    macros::{input_value, value, vars},
     resolve::Type,
     value::Value,
+    executor::Variables,
 };
 
 pub trait Interface<S>
diff --git a/juniper/src/lib.rs b/juniper/src/lib.rs
index 70c51418..c612b27a 100644
--- a/juniper/src/lib.rs
+++ b/juniper/src/lib.rs
@@ -76,7 +76,7 @@ pub use crate::{
     introspection::IntrospectionFormat,
     macros::{
         helper::subscription::{ExtractTypeFromStream, IntoFieldResult},
-        input_value as graphql_input_value, value as graphql_value,
+        input_value as graphql_input_value, value as graphql_value, vars as graphql_vars,
     },
     parser::{ParseError, ScalarToken, Spanning},
     schema::{
diff --git a/juniper/src/macros/mod.rs b/juniper/src/macros/mod.rs
index 37bd0218..9e60986e 100644
--- a/juniper/src/macros/mod.rs
+++ b/juniper/src/macros/mod.rs
@@ -8,8 +8,7 @@ pub mod reflect;
 
 mod input_value;
 mod value;
-#[macro_use]
-mod graphql_vars;
+mod vars;
 
 #[doc(inline)]
-pub use self::{input_value::input_value, value::value};
+pub use self::{input_value::input_value, value::value, vars::vars};
diff --git a/juniper/src/macros/graphql_vars.rs b/juniper/src/macros/vars.rs
similarity index 81%
rename from juniper/src/macros/graphql_vars.rs
rename to juniper/src/macros/vars.rs
index 56bff3b3..d4b75e82 100644
--- a/juniper/src/macros/graphql_vars.rs
+++ b/juniper/src/macros/vars.rs
@@ -1,20 +1,18 @@
-//! [`graphql_vars!`] macro implementation.
-//!
-//! [`graphql_vars!`]: graphql_vars
+//! [`vars!`] macro implementation.
 
-/// Constructs [`Variables`] via JSON-like syntax.
+/// Constructs [`graphql::Variables`] via JSON-like syntax.
 ///
-/// [`Variables`] key should implement [`Into`]`<`[`String`]`>`.
+/// [`graphql::Variables`] key should implement [`Into`]`<`[`String`]`>`.
 /// ```rust
 /// # use std::borrow::Cow;
 /// #
-/// # use juniper::{graphql_vars, Variables};
+/// # use juniper::graphql;
 /// #
 /// let code = 200;
 /// let features = vec!["key", "value"];
 /// let key: Cow<'static, str> = "key".into();
 ///
-/// let value: Variables = graphql_vars! {
+/// let value: graphql::Variables = graphql::vars! {
 ///     "code": code,
 ///     "success": code == 200,
 ///     features[0]: features[1],
@@ -22,12 +20,11 @@
 /// };
 /// ```
 ///
-/// See [`graphql_input_value!`] for more info on syntax of value after `:`.
+/// See [`graphql::input_value!`] for more info on syntax of value after `:`.
 ///
-/// [`graphql_input_value!`]: crate::graphql_input_value
-/// [`Variables`]: crate::Variables
-#[macro_export]
-macro_rules! graphql_vars {
+/// [`graphql::input_value!`]: crate::graphql::input_value
+/// [`graphql::Variables`]: crate::graphql::Variables
+macro_rules! vars {
     ////////////
     // Object //
     ////////////
@@ -38,12 +35,12 @@ macro_rules! graphql_vars {
     // Insert the current entry followed by trailing comma.
     (@object $object:ident [$($key:tt)+] ($value:expr) , $($rest:tt)*) => {
         let _ = $object.insert(($($key)+).into(), $value);
-        $crate::graphql_vars! {@object $object () ($($rest)*) ($($rest)*)};
+        $crate::graphql::vars! {@object $object () ($($rest)*) ($($rest)*)};
     };
 
     // Current entry followed by unexpected token.
     (@object $object:ident [$($key:tt)+] ($value:expr) $unexpected:tt $($rest:tt)*) => {
-        $crate::graphql_vars! {@unexpected $unexpected};
+        $crate::graphql::vars! {@unexpected $unexpected};
     };
 
     // Insert the last entry without trailing comma.
@@ -53,7 +50,7 @@ macro_rules! graphql_vars {
 
     // Next value is `null`.
     (@object $object:ident ($($key:tt)+) (: null $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!(null)) $($rest)*
@@ -62,7 +59,7 @@ macro_rules! graphql_vars {
 
     // Next value is `None`.
     (@object $object:ident ($($key:tt)+) (: None $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!(None)) $($rest)*
@@ -71,7 +68,7 @@ macro_rules! graphql_vars {
 
     // Next value is a variable.
     (@object $object:ident ($($key:tt)+) (: @$var:ident $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!(@$var)) $($rest)*
@@ -80,7 +77,7 @@ macro_rules! graphql_vars {
 
     // Next value is an array.
     (@object $object:ident ($($key:tt)+) (: [$($array:tt)*] $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!([$($array)*])) $($rest)*
@@ -89,7 +86,7 @@ macro_rules! graphql_vars {
 
     // Next value is a map.
     (@object $object:ident ($($key:tt)+) (: {$($map:tt)*} $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!({$($map)*})) $($rest)*
@@ -98,7 +95,7 @@ macro_rules! graphql_vars {
 
     // Next value is `true`, `false` or enum ident followed by a comma.
     (@object $object:ident ($($key:tt)+) (: $ident:ident , $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!($ident)) , $($rest)*
@@ -107,7 +104,7 @@ macro_rules! graphql_vars {
 
     // Next value is `true`, `false` or enum ident without trailing comma.
     (@object $object:ident ($($key:tt)+) (: $last:ident ) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!($last))
@@ -116,7 +113,7 @@ macro_rules! graphql_vars {
 
     // Next value is an expression followed by comma.
     (@object $object:ident ($($key:tt)+) (: $value:expr , $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!($value)) , $($rest)*
@@ -125,7 +122,7 @@ macro_rules! graphql_vars {
 
     // Last value is an expression with no trailing comma.
     (@object $object:ident ($($key:tt)+) (: $value:expr) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             [$($key)+]
             ($crate::graphql_input_value!($value))
@@ -135,44 +132,44 @@ macro_rules! graphql_vars {
     // Missing value for last entry. Trigger a reasonable error message.
     (@object $object:ident ($($key:tt)+) (:) $copy:tt) => {
         // "unexpected end of macro invocation"
-        $crate::graphql_vars! {};
+        $crate::graphql::vars! {};
     };
 
     // Missing colon and value for last entry. Trigger a reasonable error
     // message.
     (@object $object:ident ($($key:tt)+) () $copy:tt) => {
         // "unexpected end of macro invocation"
-        $crate::graphql_vars! {};
+        $crate::graphql::vars! {};
     };
 
     // Misplaced colon. Trigger a reasonable error message.
     (@object $object:ident () (: $($rest:tt)*) ($colon:tt $($copy:tt)*)) => {
         // Takes no arguments so "no rules expected the token `:`".
-        $crate::graphql_vars! {@unexpected $colon};
+        $crate::graphql::vars! {@unexpected $colon};
     };
 
     // Found a comma inside a key. Trigger a reasonable error message.
     (@object $object:ident ($($key:tt)*) (, $($rest:tt)*) ($comma:tt $($copy:tt)*)) => {
         // Takes no arguments so "no rules expected the token `,`".
-        $crate::graphql_vars! {@unexpected $comma};
+        $crate::graphql::vars! {@unexpected $comma};
     };
 
     // Key is fully parenthesized. This avoids clippy double_parens false
     // positives because the parenthesization may be necessary here.
     (@object $object:ident () (($key:expr) : $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object ($key) (: $($rest)*) (: $($rest)*)
         };
     };
 
     // Refuse to absorb colon token into key expression.
     (@object $object:ident ($($key:tt)*) (: $($unexpected:tt)+) $copy:tt) => {
-        $crate::graphql_vars! {@unexpected $($unexpected)+};
+        $crate::graphql::vars! {@unexpected $($unexpected)+};
     };
 
     // Munch a token into the current key.
     (@object $object:ident ($($key:tt)*) ($tt:tt $($rest:tt)*) $copy:tt) => {
-        $crate::graphql_vars! {
+        $crate::graphql::vars! {
             @object $object
             ($($key)* $tt)
             ($($rest)*) ($($rest)*)
@@ -189,26 +186,33 @@ macro_rules! graphql_vars {
     // Defaults //
     //////////////
 
-    () => {{ $crate::Variables::<_>::new() }};
+    () => {{ $crate::graphql::Variables::<_>::new() }};
 
     ( $($map:tt)+ ) => {{
-        let mut object = $crate::Variables::<_>::new();
-        $crate::graphql_vars! {@object object () ($($map)*) ($($map)*)};
+        let mut object = $crate::graphql::Variables::<_>::new();
+        $crate::graphql::vars! {@object object () ($($map)*) ($($map)*)};
         object
     }};
 }
 
+#[doc(inline)]
+pub(super) use vars;
+
 #[cfg(test)]
 mod tests {
     use indexmap::{indexmap, IndexMap};
 
-    type V = crate::Variables;
+    use crate::graphql;
 
-    type IV = crate::InputValue;
+    use super::vars;
+
+    type V = graphql::Variables;
+
+    type IV = graphql::InputValue;
 
     #[test]
     fn empty() {
-        assert_eq!(graphql_vars! {}, V::new());
+        assert_eq!(vars! {}, V::new());
     }
 
     #[test]
@@ -216,37 +220,37 @@ mod tests {
         let val = 42;
 
         assert_eq!(
-            graphql_vars! {"key": 123},
+            vars! {"key": 123},
             vec![("key".to_owned(), IV::scalar(123))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": "val"},
+            vars! {"key": "val"},
             vec![("key".to_owned(), IV::scalar("val"))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": 1.23},
+            vars! {"key": 1.23},
             vec![("key".to_owned(), IV::scalar(1.23))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": 1 + 2},
+            vars! {"key": 1 + 2},
             vec![("key".to_owned(), IV::scalar(3))]
                 .into_iter()
                 .collect(),
         );
         assert_eq!(
-            graphql_vars! {"key": false},
+            vars! {"key": false},
             vec![("key".to_owned(), IV::scalar(false))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": (val)},
+            vars! {"key": (val)},
             vec![("key".to_owned(), IV::scalar(42))]
                 .into_iter()
                 .collect::<V>(),
@@ -256,13 +260,13 @@ mod tests {
     #[test]
     fn r#enum() {
         assert_eq!(
-            graphql_vars! {"key": ENUM},
+            vars! {"key": ENUM},
             vec![("key".to_owned(), IV::enum_value("ENUM"))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": lowercase},
+            vars! {"key": lowercase},
             vec![("key".to_owned(), IV::enum_value("lowercase"))]
                 .into_iter()
                 .collect::<V>(),
@@ -272,19 +276,19 @@ mod tests {
     #[test]
     fn variable() {
         assert_eq!(
-            graphql_vars! {"key": @var},
+            vars! {"key": @var},
             vec![("key".to_owned(), IV::variable("var"))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": @array},
+            vars! {"key": @array},
             vec![("key".to_owned(), IV::variable("array"))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": @object},
+            vars! {"key": @object},
             vec![("key".to_owned(), IV::variable("object"))]
                 .into_iter()
                 .collect::<V>(),
@@ -296,46 +300,46 @@ mod tests {
         let val = 42;
 
         assert_eq!(
-            graphql_vars! {"key": []},
+            vars! {"key": []},
             vec![("key".to_owned(), IV::list(vec![]))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": [null]},
+            vars! {"key": [null]},
             vec![("key".to_owned(), IV::list(vec![IV::Null]))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": [1]},
+            vars! {"key": [1]},
             vec![("key".to_owned(), IV::list(vec![IV::scalar(1)]))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [1 + 2]},
+            vars! {"key": [1 + 2]},
             vec![("key".to_owned(), IV::list(vec![IV::scalar(3)]))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [(val)]},
+            vars! {"key": [(val)]},
             vec![("key".to_owned(), IV::list(vec![IV::scalar(42)]))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": [ENUM]},
+            vars! {"key": [ENUM]},
             vec![("key".to_owned(), IV::list(vec![IV::enum_value("ENUM")]))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [lowercase]},
+            vars! {"key": [lowercase]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![IV::enum_value("lowercase")])
@@ -345,26 +349,26 @@ mod tests {
         );
 
         assert_eq!(
-            graphql_vars! {"key": [@var]},
+            vars! {"key": [@var]},
             vec![("key".to_owned(), IV::list(vec![IV::variable("var")]))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [@array]},
+            vars! {"key": [@array]},
             vec![("key".to_owned(), IV::list(vec![IV::variable("array")]))]
                 .into_iter()
                 .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [@object]},
+            vars! {"key": [@object]},
             vec![("key".to_owned(), IV::list(vec![IV::variable("object")]))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": [1, [2], 3]},
+            vars! {"key": [1, [2], 3]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![
@@ -377,7 +381,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [1, [2 + 3], 3]},
+            vars! {"key": [1, [2 + 3], 3]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![
@@ -390,7 +394,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [1, [ENUM], (val)]},
+            vars! {"key": [1, [ENUM], (val)]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![
@@ -403,7 +407,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [1 + 2, [(val)], @val]},
+            vars! {"key": [1 + 2, [(val)], @val]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![
@@ -416,7 +420,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": [1, [@val], ENUM]},
+            vars! {"key": [1, [@val], ENUM]},
             vec![(
                 "key".to_owned(),
                 IV::list(vec![
@@ -435,21 +439,21 @@ mod tests {
         let val = 42;
 
         assert_eq!(
-            graphql_vars! {"key": {}},
+            vars! {"key": {}},
             vec![("key".to_owned(), IV::object(IndexMap::<String, _>::new()))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": {"key": null}},
+            vars! {"key": {"key": null}},
             vec![("key".to_owned(), IV::object(indexmap! {"key" => IV::Null}))]
                 .into_iter()
                 .collect::<V>(),
         );
 
         assert_eq!(
-            graphql_vars! {"key": {"key": 123}},
+            vars! {"key": {"key": 123}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::scalar(123)}),
@@ -458,7 +462,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": 1 + 2}},
+            vars! {"key": {"key": 1 + 2}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::scalar(3)}),
@@ -467,7 +471,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": (val)}},
+            vars! {"key": {"key": (val)}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::scalar(42)}),
@@ -477,7 +481,7 @@ mod tests {
         );
 
         assert_eq!(
-            graphql_vars! {"key": {"key": []}},
+            vars! {"key": {"key": []}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::list(vec![])}),
@@ -486,7 +490,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": [null]}},
+            vars! {"key": {"key": [null]}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::list(vec![IV::Null])}),
@@ -495,7 +499,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": [1]}},
+            vars! {"key": {"key": [1]}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::list(vec![IV::scalar(1)])}),
@@ -504,7 +508,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": [1 + 2]}},
+            vars! {"key": {"key": [1 + 2]}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::list(vec![IV::scalar(3)])}),
@@ -513,7 +517,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": [(val)]}},
+            vars! {"key": {"key": [(val)]}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::list(vec![IV::scalar(42)])}),
@@ -522,7 +526,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": ENUM}},
+            vars! {"key": {"key": ENUM}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::enum_value("ENUM")}),
@@ -531,7 +535,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": lowercase}},
+            vars! {"key": {"key": lowercase}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::enum_value("lowercase")}),
@@ -540,7 +544,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": @val}},
+            vars! {"key": {"key": @val}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::variable("val")}),
@@ -549,7 +553,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {"key": {"key": @array}},
+            vars! {"key": {"key": @array}},
             vec![(
                 "key".to_owned(),
                 IV::object(indexmap! {"key" => IV::variable("array")}),
@@ -558,7 +562,7 @@ mod tests {
             .collect::<V>(),
         );
         assert_eq!(
-            graphql_vars! {
+            vars! {
                 "inner": {
                     "key1": (val),
                     "key2": "val",