Skip to content

Commit a87552b

Browse files
maungu-stripesodiumjoe
authored andcommitted
Add borrows and bounds
1 parent 2f95fd7 commit a87552b

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

src/schema/ast.rs

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@ use crate::position::Pos;
88

99
#[derive(Debug, Clone, Default, PartialEq)]
1010
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11+
#[cfg_attr(feature = "serde", serde(bound(deserialize="'a: 'de, T: Deserialize<'de>")))]
1112
pub struct Document<'a, T: Text<'a>>
1213
where
1314
T: Text<'a>,
1415
{
16+
#[cfg_attr(feature = "serde", serde(borrow))]
1517
pub definitions: Vec<Definition<'a, T>>,
1618
}
1719

@@ -36,17 +38,24 @@ impl<'a> Document<'a, String> {
3638

3739
#[derive(Debug, Clone, PartialEq)]
3840
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
41+
#[cfg_attr(feature = "serde", serde(bound(deserialize="'a: 'de, T: Deserialize<'de>")))]
3942
pub enum Definition<'a, T: Text<'a>> {
43+
#[cfg_attr(feature = "serde", serde(borrow))]
4044
SchemaDefinition(SchemaDefinition<'a, T>),
45+
#[cfg_attr(feature = "serde", serde(borrow))]
4146
TypeDefinition(TypeDefinition<'a, T>),
47+
#[cfg_attr(feature = "serde", serde(borrow))]
4248
TypeExtension(TypeExtension<'a, T>),
49+
#[cfg_attr(feature = "serde", serde(borrow))]
4350
DirectiveDefinition(DirectiveDefinition<'a, T>),
4451
}
4552

4653
#[derive(Debug, Clone, Default, PartialEq)]
4754
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
55+
#[cfg_attr(feature = "serde", serde(bound(deserialize="'a: 'de, T: Deserialize<'de>")))]
4856
pub struct SchemaDefinition<'a, T: Text<'a>> {
4957
pub position: Pos,
58+
#[cfg_attr(feature = "serde", serde(borrow))]
5059
pub directives: Vec<Directive<'a, T>>,
5160
pub query: Option<T::Value>,
5261
pub mutation: Option<T::Value>,
@@ -55,23 +64,37 @@ pub struct SchemaDefinition<'a, T: Text<'a>> {
5564

5665
#[derive(Debug, Clone, PartialEq)]
5766
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
67+
#[cfg_attr(feature = "serde", serde(bound(deserialize="'a: 'de, T: Deserialize<'de>")))]
5868
pub enum TypeDefinition<'a, T: Text<'a>> {
69+
#[cfg_attr(feature = "serde", serde(borrow))]
5970
Scalar(ScalarType<'a, T>),
71+
#[cfg_attr(feature = "serde", serde(borrow))]
6072
Object(ObjectType<'a, T>),
73+
#[cfg_attr(feature = "serde", serde(borrow))]
6174
Interface(InterfaceType<'a, T>),
75+
#[cfg_attr(feature = "serde", serde(borrow))]
6276
Union(UnionType<'a, T>),
77+
#[cfg_attr(feature = "serde", serde(borrow))]
6378
Enum(EnumType<'a, T>),
79+
#[cfg_attr(feature = "serde", serde(borrow))]
6480
InputObject(InputObjectType<'a, T>),
6581
}
6682

6783
#[derive(Debug, Clone, PartialEq)]
6884
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
85+
#[cfg_attr(feature = "serde", serde(bound(deserialize="'a: 'de, T: Deserialize<'de>")))]
6986
pub enum TypeExtension<'a, T: Text<'a>> {
87+
#[cfg_attr(feature = "serde", serde(borrow))]
7088
Scalar(ScalarTypeExtension<'a, T>),
89+
#[cfg_attr(feature = "serde", serde(borrow))]
7190
Object(ObjectTypeExtension<'a, T>),
91+
#[cfg_attr(feature = "serde", serde(borrow))]
7292
Interface(InterfaceTypeExtension<'a, T>),
93+
#[cfg_attr(feature = "serde", serde(borrow))]
7394
Union(UnionTypeExtension<'a, T>),
95+
#[cfg_attr(feature = "serde", serde(borrow))]
7496
Enum(EnumTypeExtension<'a, T>),
97+
#[cfg_attr(feature = "serde", serde(borrow))]
7598
InputObject(InputObjectTypeExtension<'a, T>),
7699
}
77100

@@ -81,6 +104,7 @@ pub struct ScalarType<'a, T: Text<'a>> {
81104
pub position: Pos,
82105
pub description: Option<String>,
83106
pub name: T::Value,
107+
#[cfg_attr(feature = "serde", serde(borrow))]
84108
pub directives: Vec<Directive<'a, T>>,
85109
}
86110

@@ -103,6 +127,7 @@ where
103127
pub struct ScalarTypeExtension<'a, T: Text<'a>> {
104128
pub position: Pos,
105129
pub name: T::Value,
130+
#[cfg_attr(feature = "serde", serde(borrow))]
106131
pub directives: Vec<Directive<'a, T>>,
107132
}
108133

@@ -126,7 +151,9 @@ pub struct ObjectType<'a, T: Text<'a>> {
126151
pub description: Option<String>,
127152
pub name: T::Value,
128153
pub implements_interfaces: Vec<T::Value>,
154+
#[cfg_attr(feature = "serde", serde(borrow))]
129155
pub directives: Vec<Directive<'a, T>>,
156+
#[cfg_attr(feature = "serde", serde(borrow))]
130157
pub fields: Vec<Field<'a, T>>,
131158
}
132159

@@ -152,7 +179,9 @@ pub struct ObjectTypeExtension<'a, T: Text<'a>> {
152179
pub position: Pos,
153180
pub name: T::Value,
154181
pub implements_interfaces: Vec<T::Value>,
182+
#[cfg_attr(feature = "serde", serde(borrow))]
155183
pub directives: Vec<Directive<'a, T>>,
184+
#[cfg_attr(feature = "serde", serde(borrow))]
156185
pub fields: Vec<Field<'a, T>>,
157186
}
158187

@@ -177,8 +206,11 @@ pub struct Field<'a, T: Text<'a>> {
177206
pub position: Pos,
178207
pub description: Option<String>,
179208
pub name: T::Value,
209+
#[cfg_attr(feature = "serde", serde(borrow))]
180210
pub arguments: Vec<InputValue<'a, T>>,
211+
#[cfg_attr(feature = "serde", serde(borrow))]
181212
pub field_type: Type<'a, T>,
213+
#[cfg_attr(feature = "serde", serde(borrow))]
182214
pub directives: Vec<Directive<'a, T>>,
183215
}
184216

@@ -188,8 +220,11 @@ pub struct InputValue<'a, T: Text<'a>> {
188220
pub position: Pos,
189221
pub description: Option<String>,
190222
pub name: T::Value,
223+
#[cfg_attr(feature = "serde", serde(borrow))]
191224
pub value_type: Type<'a, T>,
225+
#[cfg_attr(feature = "serde", serde(borrow))]
192226
pub default_value: Option<Value<'a, T>>,
227+
#[cfg_attr(feature = "serde", serde(borrow))]
193228
pub directives: Vec<Directive<'a, T>>,
194229
}
195230

@@ -200,7 +235,9 @@ pub struct InterfaceType<'a, T: Text<'a>> {
200235
pub description: Option<String>,
201236
pub name: T::Value,
202237
pub implements_interfaces: Vec<T::Value>,
238+
#[cfg_attr(feature = "serde", serde(borrow))]
203239
pub directives: Vec<Directive<'a, T>>,
240+
#[cfg_attr(feature = "serde", serde(borrow))]
204241
pub fields: Vec<Field<'a, T>>,
205242
}
206243

@@ -226,7 +263,9 @@ pub struct InterfaceTypeExtension<'a, T: Text<'a>> {
226263
pub position: Pos,
227264
pub name: T::Value,
228265
pub implements_interfaces: Vec<T::Value>,
266+
#[cfg_attr(feature = "serde", serde(borrow))]
229267
pub directives: Vec<Directive<'a, T>>,
268+
#[cfg_attr(feature = "serde", serde(borrow))]
230269
pub fields: Vec<Field<'a, T>>,
231270
}
232271

@@ -251,6 +290,7 @@ pub struct UnionType<'a, T: Text<'a>> {
251290
pub position: Pos,
252291
pub description: Option<String>,
253292
pub name: T::Value,
293+
#[cfg_attr(feature = "serde", serde(borrow))]
254294
pub directives: Vec<Directive<'a, T>>,
255295
pub types: Vec<T::Value>,
256296
}
@@ -275,6 +315,7 @@ where
275315
pub struct UnionTypeExtension<'a, T: Text<'a>> {
276316
pub position: Pos,
277317
pub name: T::Value,
318+
#[cfg_attr(feature = "serde", serde(borrow))]
278319
pub directives: Vec<Directive<'a, T>>,
279320
pub types: Vec<T::Value>,
280321
}
@@ -299,7 +340,9 @@ pub struct EnumType<'a, T: Text<'a>> {
299340
pub position: Pos,
300341
pub description: Option<String>,
301342
pub name: T::Value,
343+
#[cfg_attr(feature = "serde", serde(borrow))]
302344
pub directives: Vec<Directive<'a, T>>,
345+
#[cfg_attr(feature = "serde", serde(borrow))]
303346
pub values: Vec<EnumValue<'a, T>>,
304347
}
305348

@@ -324,6 +367,7 @@ pub struct EnumValue<'a, T: Text<'a>> {
324367
pub position: Pos,
325368
pub description: Option<String>,
326369
pub name: T::Value,
370+
#[cfg_attr(feature = "serde", serde(borrow))]
327371
pub directives: Vec<Directive<'a, T>>,
328372
}
329373

@@ -346,7 +390,9 @@ where
346390
pub struct EnumTypeExtension<'a, T: Text<'a>> {
347391
pub position: Pos,
348392
pub name: T::Value,
393+
#[cfg_attr(feature = "serde", serde(borrow))]
349394
pub directives: Vec<Directive<'a, T>>,
395+
#[cfg_attr(feature = "serde", serde(borrow))]
350396
pub values: Vec<EnumValue<'a, T>>,
351397
}
352398

@@ -370,7 +416,9 @@ pub struct InputObjectType<'a, T: Text<'a>> {
370416
pub position: Pos,
371417
pub description: Option<String>,
372418
pub name: T::Value,
419+
#[cfg_attr(feature = "serde", serde(borrow))]
373420
pub directives: Vec<Directive<'a, T>>,
421+
#[cfg_attr(feature = "serde", serde(borrow))]
374422
pub fields: Vec<InputValue<'a, T>>,
375423
}
376424

@@ -394,7 +442,9 @@ where
394442
pub struct InputObjectTypeExtension<'a, T: Text<'a>> {
395443
pub position: Pos,
396444
pub name: T::Value,
445+
#[cfg_attr(feature = "serde", serde(borrow))]
397446
pub directives: Vec<Directive<'a, T>>,
447+
#[cfg_attr(feature = "serde", serde(borrow))]
398448
pub fields: Vec<InputValue<'a, T>>,
399449
}
400450

@@ -445,6 +495,7 @@ pub struct DirectiveDefinition<'a, T: Text<'a>> {
445495
pub position: Pos,
446496
pub description: Option<String>,
447497
pub name: T::Value,
498+
#[cfg_attr(feature = "serde", serde(borrow))]
448499
pub arguments: Vec<InputValue<'a, T>>,
449500
pub repeatable: bool,
450501
pub locations: Vec<DirectiveLocation>,

0 commit comments

Comments
 (0)