6
6
//! [graphql grammar]: http://facebook.github.io/graphql/October2016/#sec-Appendix-Grammar-Summary
7
7
//!
8
8
#[ cfg( feature = "serde" ) ]
9
- use serde:: Serialize ;
9
+ use serde:: { Deserialize , Serialize } ;
10
10
11
11
pub use crate :: common:: { Directive , Number , Text , Type , Value } ;
12
12
use crate :: position:: Pos ;
13
13
14
14
/// Root of query data
15
15
#[ derive( Debug , Clone , PartialEq ) ]
16
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
16
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
17
+ #[ cfg_attr(
18
+ feature = "serde" ,
19
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
20
+ ) ]
17
21
pub struct Document < ' a , T : Text < ' a > > {
22
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
18
23
pub definitions : Vec < Definition < ' a , T > > ,
19
24
}
20
25
@@ -38,115 +43,175 @@ impl<'a> Document<'a, String> {
38
43
}
39
44
40
45
#[ derive( Debug , Clone , PartialEq ) ]
41
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
46
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
47
+ #[ cfg_attr(
48
+ feature = "serde" ,
49
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
50
+ ) ]
42
51
pub enum Definition < ' a , T : Text < ' a > > {
43
52
Operation ( OperationDefinition < ' a , T > ) ,
53
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
44
54
Fragment ( FragmentDefinition < ' a , T > ) ,
45
55
}
46
56
47
57
#[ derive( Debug , Clone , PartialEq ) ]
48
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
58
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
59
+ #[ cfg_attr(
60
+ feature = "serde" ,
61
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
62
+ ) ]
49
63
pub struct FragmentDefinition < ' a , T : Text < ' a > > {
50
64
pub position : Pos ,
51
65
pub name : T :: Value ,
66
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
52
67
pub type_condition : TypeCondition < ' a , T > ,
53
68
pub directives : Vec < Directive < ' a , T > > ,
54
69
pub selection_set : SelectionSet < ' a , T > ,
55
70
}
56
71
57
72
#[ derive( Debug , Clone , PartialEq ) ]
58
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
73
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
74
+ #[ cfg_attr(
75
+ feature = "serde" ,
76
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
77
+ ) ]
59
78
pub enum OperationDefinition < ' a , T : Text < ' a > > {
60
79
SelectionSet ( SelectionSet < ' a , T > ) ,
80
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
61
81
Query ( Query < ' a , T > ) ,
62
82
Mutation ( Mutation < ' a , T > ) ,
63
83
Subscription ( Subscription < ' a , T > ) ,
64
84
}
65
85
66
86
#[ derive( Debug , Clone , PartialEq ) ]
67
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
87
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
88
+ #[ cfg_attr(
89
+ feature = "serde" ,
90
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
91
+ ) ]
68
92
pub struct Query < ' a , T : Text < ' a > > {
69
93
pub position : Pos ,
70
94
pub name : Option < T :: Value > ,
95
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
71
96
pub variable_definitions : Vec < VariableDefinition < ' a , T > > ,
72
97
pub directives : Vec < Directive < ' a , T > > ,
73
98
pub selection_set : SelectionSet < ' a , T > ,
74
99
}
75
100
76
101
#[ derive( Debug , Clone , PartialEq ) ]
77
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
102
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
103
+ #[ cfg_attr(
104
+ feature = "serde" ,
105
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
106
+ ) ]
78
107
pub struct Mutation < ' a , T : Text < ' a > > {
79
108
pub position : Pos ,
80
109
pub name : Option < T :: Value > ,
110
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
81
111
pub variable_definitions : Vec < VariableDefinition < ' a , T > > ,
82
112
pub directives : Vec < Directive < ' a , T > > ,
83
113
pub selection_set : SelectionSet < ' a , T > ,
84
114
}
85
115
86
116
#[ derive( Debug , Clone , PartialEq ) ]
87
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
117
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
118
+ #[ cfg_attr(
119
+ feature = "serde" ,
120
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
121
+ ) ]
88
122
pub struct Subscription < ' a , T : Text < ' a > > {
89
123
pub position : Pos ,
90
124
pub name : Option < T :: Value > ,
125
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
91
126
pub variable_definitions : Vec < VariableDefinition < ' a , T > > ,
92
127
pub directives : Vec < Directive < ' a , T > > ,
93
128
pub selection_set : SelectionSet < ' a , T > ,
94
129
}
95
130
96
131
#[ derive( Debug , Clone , PartialEq ) ]
97
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
132
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
133
+ #[ cfg_attr(
134
+ feature = "serde" ,
135
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
136
+ ) ]
98
137
pub struct SelectionSet < ' a , T : Text < ' a > > {
99
138
pub span : ( Pos , Pos ) ,
139
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
100
140
pub items : Vec < Selection < ' a , T > > ,
101
141
}
102
142
103
143
#[ derive( Debug , Clone , PartialEq ) ]
104
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
144
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
145
+ #[ cfg_attr(
146
+ feature = "serde" ,
147
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
148
+ ) ]
105
149
pub struct VariableDefinition < ' a , T : Text < ' a > > {
106
150
pub position : Pos ,
107
151
pub name : T :: Value ,
152
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
108
153
pub var_type : Type < ' a , T > ,
109
154
pub default_value : Option < Value < ' a , T > > ,
110
155
}
111
156
112
157
#[ derive( Debug , Clone , PartialEq ) ]
113
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
158
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
159
+ #[ cfg_attr(
160
+ feature = "serde" ,
161
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
162
+ ) ]
114
163
pub enum Selection < ' a , T : Text < ' a > > {
164
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
115
165
Field ( Field < ' a , T > ) ,
116
166
FragmentSpread ( FragmentSpread < ' a , T > ) ,
117
167
InlineFragment ( InlineFragment < ' a , T > ) ,
118
168
}
119
169
120
170
#[ derive( Debug , Clone , PartialEq ) ]
121
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
171
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
172
+ #[ cfg_attr(
173
+ feature = "serde" ,
174
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
175
+ ) ]
122
176
pub struct Field < ' a , T : Text < ' a > > {
123
177
pub position : Pos ,
124
178
pub alias : Option < T :: Value > ,
125
179
pub name : T :: Value ,
180
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
126
181
pub arguments : Vec < ( T :: Value , Value < ' a , T > ) > ,
127
182
pub directives : Vec < Directive < ' a , T > > ,
128
183
pub selection_set : SelectionSet < ' a , T > ,
129
184
}
130
185
131
186
#[ derive( Debug , Clone , PartialEq ) ]
132
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
187
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
188
+ #[ cfg_attr(
189
+ feature = "serde" ,
190
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
191
+ ) ]
133
192
pub struct FragmentSpread < ' a , T : Text < ' a > > {
134
193
pub position : Pos ,
135
194
pub fragment_name : T :: Value ,
195
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
136
196
pub directives : Vec < Directive < ' a , T > > ,
137
197
}
138
198
139
199
#[ derive( Debug , Clone , PartialEq ) ]
140
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
200
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
141
201
pub enum TypeCondition < ' a , T : Text < ' a > > {
142
202
On ( T :: Value ) ,
143
203
}
144
204
145
205
#[ derive( Debug , Clone , PartialEq ) ]
146
- #[ cfg_attr( feature = "serde" , derive( Serialize ) ) ]
206
+ #[ cfg_attr( feature = "serde" , derive( Serialize , Deserialize ) ) ]
207
+ #[ cfg_attr(
208
+ feature = "serde" ,
209
+ serde( bound( deserialize = "'a: 'de, T: Deserialize<'de>" ) )
210
+ ) ]
147
211
pub struct InlineFragment < ' a , T : Text < ' a > > {
148
212
pub position : Pos ,
149
213
pub type_condition : Option < TypeCondition < ' a , T > > ,
214
+ #[ cfg_attr( feature = "serde" , serde( borrow) ) ]
150
215
pub directives : Vec < Directive < ' a , T > > ,
151
216
pub selection_set : SelectionSet < ' a , T > ,
152
217
}
0 commit comments