@@ -101,6 +101,10 @@ impl<'a> OperationVisitorContext<'a> {
101
101
self . type_stack . last ( ) . unwrap_or ( & None ) . as_ref ( )
102
102
}
103
103
104
+ pub fn current_input_type ( & self ) -> Option < & schema:: TypeDefinition > {
105
+ self . input_type_stack . last ( ) . unwrap_or ( & None ) . as_ref ( )
106
+ }
107
+
104
108
pub fn current_parent_type ( & self ) -> Option < & schema:: TypeDefinition > {
105
109
self . parent_type_stack . last ( ) . unwrap_or ( & None ) . as_ref ( )
106
110
}
@@ -227,32 +231,20 @@ fn visit_input_value<'a, Visitor, UserContext>(
227
231
Visitor : OperationVisitor < ' a , UserContext > ,
228
232
{
229
233
match input_value {
230
- Value :: Boolean ( v) => {
231
- visitor. enter_scalar_value ( context, user_context, v) ;
232
- visitor. leave_scalar_value ( context, user_context, v) ;
233
- }
234
- Value :: Float ( v) => {
235
- visitor. enter_scalar_value ( context, user_context, v) ;
236
- visitor. leave_scalar_value ( context, user_context, v) ;
237
- }
238
- Value :: Int ( v) => {
239
- visitor. enter_scalar_value ( context, user_context, v) ;
240
- visitor. leave_scalar_value ( context, user_context, v) ;
234
+ Value :: Boolean ( _) | Value :: Float ( _) | Value :: Int ( _) | Value :: String ( _) => {
235
+ visitor. enter_scalar_value ( context, user_context, input_value) ;
236
+ visitor. leave_scalar_value ( context, user_context, input_value) ;
241
237
}
242
238
Value :: Null => {
243
239
visitor. enter_null_value ( context, user_context, ( ) ) ;
244
240
visitor. leave_null_value ( context, user_context, ( ) ) ;
245
241
}
246
- Value :: String ( v) => {
247
- visitor. enter_scalar_value ( context, user_context, v) ;
248
- visitor. leave_scalar_value ( context, user_context, v) ;
249
- }
250
242
Value :: Enum ( v) => {
251
- visitor. enter_enum_value ( context, user_context, v. clone ( ) ) ;
252
- visitor. leave_enum_value ( context, user_context, v. clone ( ) ) ;
243
+ visitor. enter_enum_value ( context, user_context, v) ;
244
+ visitor. leave_enum_value ( context, user_context, v) ;
253
245
}
254
246
Value :: List ( v) => {
255
- visitor. enter_list_value ( context, user_context, v. clone ( ) ) ;
247
+ visitor. enter_list_value ( context, user_context, v) ;
256
248
257
249
let input_type = context. current_input_type_literal ( ) . and_then ( |t| match t {
258
250
Type :: ListType ( inner_type) => Some ( inner_type. as_ref ( ) . clone ( ) ) ,
@@ -265,10 +257,10 @@ fn visit_input_value<'a, Visitor, UserContext>(
265
257
}
266
258
} ) ;
267
259
268
- visitor. leave_list_value ( context, user_context, v. clone ( ) ) ;
260
+ visitor. leave_list_value ( context, user_context, v) ;
269
261
}
270
262
Value :: Object ( v) => {
271
- visitor. enter_object_value ( context, user_context, v. clone ( ) ) ;
263
+ visitor. enter_object_value ( context, user_context, v) ;
272
264
273
265
for ( sub_key, sub_value) in v. iter ( ) {
274
266
let input_type = context
@@ -285,11 +277,11 @@ fn visit_input_value<'a, Visitor, UserContext>(
285
277
} ) ;
286
278
}
287
279
288
- visitor. leave_object_value ( context, user_context, v. clone ( ) ) ;
280
+ visitor. leave_object_value ( context, user_context, v) ;
289
281
}
290
282
Value :: Variable ( v) => {
291
- visitor. enter_variable_value ( context, user_context, v. clone ( ) ) ;
292
- visitor. leave_variable_value ( context, user_context, v. clone ( ) ) ;
283
+ visitor. enter_variable_value ( context, user_context, v) ;
284
+ visitor. leave_variable_value ( context, user_context, v) ;
293
285
}
294
286
}
295
287
}
@@ -599,78 +591,78 @@ pub trait OperationVisitor<'a, UserContext = ()> {
599
591
) {
600
592
}
601
593
602
- fn enter_scalar_value < T > (
594
+ fn enter_scalar_value (
603
595
& mut self ,
604
596
_: & mut OperationVisitorContext < ' a > ,
605
597
_: & mut UserContext ,
606
- _: T ,
598
+ _: & Value ,
607
599
) {
608
600
}
609
- fn leave_scalar_value < T > (
601
+ fn leave_scalar_value (
610
602
& mut self ,
611
603
_: & mut OperationVisitorContext < ' a > ,
612
604
_: & mut UserContext ,
613
- _: T ,
605
+ _: & Value ,
614
606
) {
615
607
}
616
608
617
609
fn enter_enum_value (
618
610
& mut self ,
619
611
_: & mut OperationVisitorContext < ' a > ,
620
612
_: & mut UserContext ,
621
- _: String ,
613
+ _: & String ,
622
614
) {
623
615
}
624
616
fn leave_enum_value (
625
617
& mut self ,
626
618
_: & mut OperationVisitorContext < ' a > ,
627
619
_: & mut UserContext ,
628
- _: String ,
620
+ _: & String ,
629
621
) {
630
622
}
631
623
632
624
fn enter_variable_value (
633
625
& mut self ,
634
626
_: & mut OperationVisitorContext < ' a > ,
635
627
_: & mut UserContext ,
636
- _: String ,
628
+ _: & String ,
637
629
) {
638
630
}
639
631
fn leave_variable_value (
640
632
& mut self ,
641
633
_: & mut OperationVisitorContext < ' a > ,
642
634
_: & mut UserContext ,
643
- _: String ,
635
+ _: & String ,
644
636
) {
645
637
}
646
638
647
639
fn enter_list_value (
648
640
& mut self ,
649
641
_: & mut OperationVisitorContext < ' a > ,
650
642
_: & mut UserContext ,
651
- _: Vec < Value > ,
643
+ _: & Vec < Value > ,
652
644
) {
653
645
}
654
646
fn leave_list_value (
655
647
& mut self ,
656
648
_: & mut OperationVisitorContext < ' a > ,
657
649
_: & mut UserContext ,
658
- _: Vec < Value > ,
650
+ _: & Vec < Value > ,
659
651
) {
660
652
}
661
653
662
654
fn enter_object_value (
663
655
& mut self ,
664
656
_: & mut OperationVisitorContext < ' a > ,
665
657
_: & mut UserContext ,
666
- _: BTreeMap < String , Value > ,
658
+ _: & BTreeMap < String , Value > ,
667
659
) {
668
660
}
669
661
fn leave_object_value (
670
662
& mut self ,
671
663
_: & mut OperationVisitorContext < ' a > ,
672
664
_: & mut UserContext ,
673
- _: BTreeMap < String , Value > ,
665
+ _: & BTreeMap < String , Value > ,
674
666
) {
675
667
}
676
668
0 commit comments