Skip to content

Commit e54c5cd

Browse files
committed
add Deserialize to Document
1 parent 626dddb commit e54c5cd

File tree

1 file changed

+80
-15
lines changed

1 file changed

+80
-15
lines changed

src/query/ast.rs

Lines changed: 80 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,20 @@
66
//! [graphql grammar]: http://facebook.github.io/graphql/October2016/#sec-Appendix-Grammar-Summary
77
//!
88
#[cfg(feature = "serde")]
9-
use serde::Serialize;
9+
use serde::{Deserialize, Serialize};
1010

1111
pub use crate::common::{Directive, Number, Text, Type, Value};
1212
use crate::position::Pos;
1313

1414
/// Root of query data
1515
#[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+
)]
1721
pub struct Document<'a, T: Text<'a>> {
22+
#[cfg_attr(feature = "serde", serde(borrow))]
1823
pub definitions: Vec<Definition<'a, T>>,
1924
}
2025

@@ -38,115 +43,175 @@ impl<'a> Document<'a, String> {
3843
}
3944

4045
#[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+
)]
4251
pub enum Definition<'a, T: Text<'a>> {
4352
Operation(OperationDefinition<'a, T>),
53+
#[cfg_attr(feature = "serde", serde(borrow))]
4454
Fragment(FragmentDefinition<'a, T>),
4555
}
4656

4757
#[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+
)]
4963
pub struct FragmentDefinition<'a, T: Text<'a>> {
5064
pub position: Pos,
5165
pub name: T::Value,
66+
#[cfg_attr(feature = "serde", serde(borrow))]
5267
pub type_condition: TypeCondition<'a, T>,
5368
pub directives: Vec<Directive<'a, T>>,
5469
pub selection_set: SelectionSet<'a, T>,
5570
}
5671

5772
#[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+
)]
5978
pub enum OperationDefinition<'a, T: Text<'a>> {
6079
SelectionSet(SelectionSet<'a, T>),
80+
#[cfg_attr(feature = "serde", serde(borrow))]
6181
Query(Query<'a, T>),
6282
Mutation(Mutation<'a, T>),
6383
Subscription(Subscription<'a, T>),
6484
}
6585

6686
#[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+
)]
6892
pub struct Query<'a, T: Text<'a>> {
6993
pub position: Pos,
7094
pub name: Option<T::Value>,
95+
#[cfg_attr(feature = "serde", serde(borrow))]
7196
pub variable_definitions: Vec<VariableDefinition<'a, T>>,
7297
pub directives: Vec<Directive<'a, T>>,
7398
pub selection_set: SelectionSet<'a, T>,
7499
}
75100

76101
#[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+
)]
78107
pub struct Mutation<'a, T: Text<'a>> {
79108
pub position: Pos,
80109
pub name: Option<T::Value>,
110+
#[cfg_attr(feature = "serde", serde(borrow))]
81111
pub variable_definitions: Vec<VariableDefinition<'a, T>>,
82112
pub directives: Vec<Directive<'a, T>>,
83113
pub selection_set: SelectionSet<'a, T>,
84114
}
85115

86116
#[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+
)]
88122
pub struct Subscription<'a, T: Text<'a>> {
89123
pub position: Pos,
90124
pub name: Option<T::Value>,
125+
#[cfg_attr(feature = "serde", serde(borrow))]
91126
pub variable_definitions: Vec<VariableDefinition<'a, T>>,
92127
pub directives: Vec<Directive<'a, T>>,
93128
pub selection_set: SelectionSet<'a, T>,
94129
}
95130

96131
#[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+
)]
98137
pub struct SelectionSet<'a, T: Text<'a>> {
99138
pub span: (Pos, Pos),
139+
#[cfg_attr(feature = "serde", serde(borrow))]
100140
pub items: Vec<Selection<'a, T>>,
101141
}
102142

103143
#[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+
)]
105149
pub struct VariableDefinition<'a, T: Text<'a>> {
106150
pub position: Pos,
107151
pub name: T::Value,
152+
#[cfg_attr(feature = "serde", serde(borrow))]
108153
pub var_type: Type<'a, T>,
109154
pub default_value: Option<Value<'a, T>>,
110155
}
111156

112157
#[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+
)]
114163
pub enum Selection<'a, T: Text<'a>> {
164+
#[cfg_attr(feature = "serde", serde(borrow))]
115165
Field(Field<'a, T>),
116166
FragmentSpread(FragmentSpread<'a, T>),
117167
InlineFragment(InlineFragment<'a, T>),
118168
}
119169

120170
#[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+
)]
122176
pub struct Field<'a, T: Text<'a>> {
123177
pub position: Pos,
124178
pub alias: Option<T::Value>,
125179
pub name: T::Value,
180+
#[cfg_attr(feature = "serde", serde(borrow))]
126181
pub arguments: Vec<(T::Value, Value<'a, T>)>,
127182
pub directives: Vec<Directive<'a, T>>,
128183
pub selection_set: SelectionSet<'a, T>,
129184
}
130185

131186
#[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+
)]
133192
pub struct FragmentSpread<'a, T: Text<'a>> {
134193
pub position: Pos,
135194
pub fragment_name: T::Value,
195+
#[cfg_attr(feature = "serde", serde(borrow))]
136196
pub directives: Vec<Directive<'a, T>>,
137197
}
138198

139199
#[derive(Debug, Clone, PartialEq)]
140-
#[cfg_attr(feature = "serde", derive(Serialize))]
200+
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
141201
pub enum TypeCondition<'a, T: Text<'a>> {
142202
On(T::Value),
143203
}
144204

145205
#[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+
)]
147211
pub struct InlineFragment<'a, T: Text<'a>> {
148212
pub position: Pos,
149213
pub type_condition: Option<TypeCondition<'a, T>>,
214+
#[cfg_attr(feature = "serde", serde(borrow))]
150215
pub directives: Vec<Directive<'a, T>>,
151216
pub selection_set: SelectionSet<'a, T>,
152217
}

0 commit comments

Comments
 (0)