1use crate::{
2 Span,
3 ast::{
4 Directive, Document, Field, Fragment, FragmentSpread, InlineFragment, InputValue,
5 Operation, Selection, VariableDefinition,
6 },
7 parser::Spanning,
8 validation::ValidatorContext,
9 value::ScalarValue,
10};
11
12#[doc(hidden)]
13pub trait Visitor<'a, S>
14where
15 S: ScalarValue,
16{
17 fn enter_document(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Document<S>) {}
18 fn exit_document(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Document<S>) {}
19
20 fn enter_operation_definition(
21 &mut self,
22 _: &mut ValidatorContext<'a, S>,
23 _: &'a Spanning<Operation<S>>,
24 ) {
25 }
26 fn exit_operation_definition(
27 &mut self,
28 _: &mut ValidatorContext<'a, S>,
29 _: &'a Spanning<Operation<S>>,
30 ) {
31 }
32
33 fn enter_fragment_definition(
34 &mut self,
35 _: &mut ValidatorContext<'a, S>,
36 _: &'a Spanning<Fragment<S>>,
37 ) {
38 }
39 fn exit_fragment_definition(
40 &mut self,
41 _: &mut ValidatorContext<'a, S>,
42 _: &'a Spanning<Fragment<S>>,
43 ) {
44 }
45
46 fn enter_variable_definition(
47 &mut self,
48 _: &mut ValidatorContext<'a, S>,
49 _: &'a (Spanning<&'a str>, VariableDefinition<S>),
50 ) {
51 }
52 fn exit_variable_definition(
53 &mut self,
54 _: &mut ValidatorContext<'a, S>,
55 _: &'a (Spanning<&'a str>, VariableDefinition<S>),
56 ) {
57 }
58
59 fn enter_directive(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Spanning<Directive<S>>) {}
60 fn exit_directive(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Spanning<Directive<S>>) {}
61
62 fn enter_argument(
63 &mut self,
64 _: &mut ValidatorContext<'a, S>,
65 _: &'a (Spanning<&'a str>, Spanning<InputValue<S>>),
66 ) {
67 }
68 fn exit_argument(
69 &mut self,
70 _: &mut ValidatorContext<'a, S>,
71 _: &'a (Spanning<&'a str>, Spanning<InputValue<S>>),
72 ) {
73 }
74
75 fn enter_selection_set(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a [Selection<S>]) {}
76 fn exit_selection_set(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a [Selection<S>]) {}
77
78 fn enter_field(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Spanning<Field<S>>) {}
79 fn exit_field(&mut self, _: &mut ValidatorContext<'a, S>, _: &'a Spanning<Field<S>>) {}
80
81 fn enter_fragment_spread(
82 &mut self,
83 _: &mut ValidatorContext<'a, S>,
84 _: &'a Spanning<FragmentSpread<S>>,
85 ) {
86 }
87 fn exit_fragment_spread(
88 &mut self,
89 _: &mut ValidatorContext<'a, S>,
90 _: &'a Spanning<FragmentSpread<S>>,
91 ) {
92 }
93
94 fn enter_inline_fragment(
95 &mut self,
96 _: &mut ValidatorContext<'a, S>,
97 _: &'a Spanning<InlineFragment<S>>,
98 ) {
99 }
100 fn exit_inline_fragment(
101 &mut self,
102 _: &mut ValidatorContext<'a, S>,
103 _: &'a Spanning<InlineFragment<S>>,
104 ) {
105 }
106
107 fn enter_null_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, ()>) {}
108 fn exit_null_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, ()>) {}
109
110 fn enter_scalar_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, S>) {}
111 fn exit_scalar_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, S>) {}
112
113 fn enter_enum_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, String>) {}
114 fn exit_enum_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedInput<'a, String>) {}
115
116 fn enter_variable_value(
117 &mut self,
118 _: &mut ValidatorContext<'a, S>,
119 _: SpannedInput<'a, String>,
120 ) {
121 }
122 fn exit_variable_value(
123 &mut self,
124 _: &mut ValidatorContext<'a, S>,
125 _: SpannedInput<'a, String>,
126 ) {
127 }
128
129 fn enter_list_value(
130 &mut self,
131 _: &mut ValidatorContext<'a, S>,
132 _: SpannedInput<'a, Vec<Spanning<InputValue<S>>>>,
133 ) {
134 }
135 fn exit_list_value(
136 &mut self,
137 _: &mut ValidatorContext<'a, S>,
138 _: SpannedInput<'a, Vec<Spanning<InputValue<S>>>>,
139 ) {
140 }
141
142 fn enter_object_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedObject<'a, S>) {}
143 fn exit_object_value(&mut self, _: &mut ValidatorContext<'a, S>, _: SpannedObject<'a, S>) {}
144
145 fn enter_object_field(
146 &mut self,
147 _: &mut ValidatorContext<'a, S>,
148 _: (SpannedInput<'a, String>, SpannedInput<'a, InputValue<S>>),
149 ) {
150 }
151 fn exit_object_field(
152 &mut self,
153 _: &mut ValidatorContext<'a, S>,
154 _: (SpannedInput<'a, String>, SpannedInput<'a, InputValue<S>>),
155 ) {
156 }
157}
158
159type SpannedInput<'a, T> = Spanning<&'a T, &'a Span>;
160type SpannedObject<'a, S> = SpannedInput<'a, Vec<(Spanning<String>, Spanning<InputValue<S>>)>>;