Skip to content

Commit f0bd4be

Browse files
committed
WIP - copy doc strings from schema to generated types
1 parent f468877 commit f0bd4be

File tree

5 files changed

+46
-4
lines changed

5 files changed

+46
-4
lines changed

graphql_query_derive/src/constants.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ pub fn float_type() -> Ident {
1515

1616
pub fn typename_field() -> GqlObjectField {
1717
GqlObjectField {
18+
description: None,
1819
name: TYPENAME_FIELD.to_string(),
1920
/// Non-nullable, see spec:
2021
/// https://github.com/facebook/graphql/blob/master/spec/Section%204%20--%20Introspection.md

graphql_query_derive/src/inputs.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ impl ::std::convert::From<graphql_parser::schema::InputObjectType> for GqlInput
4444
.map(|field| {
4545
let name = field.name.clone();
4646
let field = GqlObjectField {
47+
description: None,
4748
name: field.name,
4849
type_: field.value_type.into(),
4950
};
@@ -66,6 +67,7 @@ impl ::std::convert::From<introspection_response::FullType> for GqlInput {
6667
.map(|f| {
6768
let name = f.input_value.name.expect("unnamed input object field");
6869
let field = GqlObjectField {
70+
description: None,
6971
name: name.clone(),
7072
type_: f
7173
.input_value
@@ -94,13 +96,15 @@ mod tests {
9496
(
9597
"pawsCount".to_string(),
9698
GqlObjectField {
99+
description: None,
97100
name: "pawsCount".to_string(),
98101
type_: FieldType::Named(float_type()),
99102
},
100103
),
101104
(
102105
"offsprings".to_string(),
103106
GqlObjectField {
107+
description: None,
104108
name: "offsprings".to_string(),
105109
type_: FieldType::Vector(Box::new(FieldType::Named(Ident::new(
106110
"Cat",
@@ -111,6 +115,7 @@ mod tests {
111115
(
112116
"requirements".to_string(),
113117
GqlObjectField {
118+
description: None,
114119
name: "requirements".to_string(),
115120
type_: FieldType::Optional(Box::new(FieldType::Named(Ident::new(
116121
"CatRequirements",

graphql_query_derive/src/objects.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,48 @@ use std::borrow::Cow;
99

1010
#[derive(Debug, PartialEq)]
1111
pub struct GqlObject {
12-
pub name: String,
12+
pub description: Option<String>,
1313
pub fields: Vec<GqlObjectField>,
14+
pub name: String,
1415
}
1516

1617
#[derive(Clone, Debug, PartialEq, Hash)]
1718
pub struct GqlObjectField {
19+
pub description: Option<String>,
1820
pub name: String,
1921
pub type_: FieldType,
2022
}
2123

2224
impl GqlObject {
23-
pub fn new(name: Cow<str>) -> GqlObject {
25+
pub fn new(name: Cow<str>, description: Option<&str>) -> GqlObject {
2426
GqlObject {
27+
description: description.map(|s| s.to_owned()),
2528
name: name.into_owned(),
2629
fields: vec![typename_field()],
2730
}
2831
}
2932

3033
pub fn from_graphql_parser_object(obj: ::graphql_parser::schema::ObjectType) -> Self {
31-
let mut item = GqlObject::new(obj.name.into());
34+
let description = obj.description.as_ref().map(|s| s.as_str());
35+
let mut item = GqlObject::new(obj.name.into(), description);
3236
item.fields
3337
.extend(obj.fields.iter().map(|f| GqlObjectField {
38+
description: None,
3439
name: f.name.clone(),
3540
type_: FieldType::from(f.field_type.clone()),
3641
}));
3742
item
3843
}
3944

4045
pub fn from_introspected_schema_json(obj: &::introspection_response::FullType) -> Self {
41-
let mut item = GqlObject::new(obj.name.clone().expect("missing object name").into());
46+
let description = obj.description.as_ref().map(|s| s.as_str());
47+
let mut item = GqlObject::new(
48+
obj.name.clone().expect("missing object name").into(),
49+
description,
50+
);
4251
let fields = obj.fields.clone().unwrap().into_iter().filter_map(|t| {
4352
t.map(|t| GqlObjectField {
53+
description: None,
4454
name: t.name.expect("field name"),
4555
type_: FieldType::from(t.type_.expect("field type")),
4656
})

graphql_query_derive/src/schema.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,7 @@ impl ::std::convert::From<graphql_parser::schema::Document> for Schema {
283283
iface
284284
.fields
285285
.extend(interface.fields.iter().map(|f| GqlObjectField {
286+
description: f.description.as_ref().map(|s| s.to_owned()),
286287
name: f.name.clone(),
287288
type_: FieldType::from(f.field_type.clone()),
288289
}));
@@ -396,6 +397,7 @@ impl ::std::convert::From<::introspection_response::IntrospectionResponse> for S
396397
.into_iter()
397398
.filter_map(|f| f)
398399
.map(|f| GqlObjectField {
400+
description: f.description,
399401
name: f.name.expect("field name"),
400402
type_: FieldType::from(f.type_.expect("field type")),
401403
}),
@@ -431,21 +433,26 @@ mod tests {
431433
assert_eq!(
432434
built.objects.get("Droid"),
433435
Some(&GqlObject {
436+
description: None,
434437
name: "Droid".to_string(),
435438
fields: vec![
436439
GqlObjectField {
440+
description: None,
437441
name: TYPENAME_FIELD.to_string(),
438442
type_: FieldType::Named(string_type()),
439443
},
440444
GqlObjectField {
445+
description: None,
441446
name: "id".to_string(),
442447
type_: FieldType::Named(Ident::new("ID", Span::call_site())),
443448
},
444449
GqlObjectField {
450+
description: None,
445451
name: "name".to_string(),
446452
type_: FieldType::Named(Ident::new("String", Span::call_site())),
447453
},
448454
GqlObjectField {
455+
description: None,
449456
name: "friends".to_string(),
450457
type_: FieldType::Optional(Box::new(FieldType::Vector(Box::new(
451458
FieldType::Optional(Box::new(FieldType::Named(Ident::new(
@@ -455,16 +462,19 @@ mod tests {
455462
)))),
456463
},
457464
GqlObjectField {
465+
description: None,
458466
name: "friendsConnection".to_string(),
459467
type_: FieldType::Named(Ident::new("FriendsConnection", Span::call_site())),
460468
},
461469
GqlObjectField {
470+
description: None,
462471
name: "appearsIn".to_string(),
463472
type_: FieldType::Vector(Box::new(FieldType::Optional(Box::new(
464473
FieldType::Named(Ident::new("Episode", Span::call_site())),
465474
)))),
466475
},
467476
GqlObjectField {
477+
description: None,
468478
name: "primaryFunction".to_string(),
469479
type_: FieldType::Optional(Box::new(FieldType::Named(Ident::new(
470480
"String",

graphql_query_derive/src/unions.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,17 +163,21 @@ mod tests {
163163
context.schema.objects.insert(
164164
"User".to_string(),
165165
GqlObject {
166+
description: None,
166167
name: "User".to_string(),
167168
fields: vec![
168169
GqlObjectField {
170+
description: None,
169171
name: "first_name".to_string(),
170172
type_: FieldType::Named(Ident::new("String", Span::call_site())),
171173
},
172174
GqlObjectField {
175+
description: None,
173176
name: "last_name".to_string(),
174177
type_: FieldType::Named(Ident::new("String", Span::call_site())),
175178
},
176179
GqlObjectField {
180+
description: None,
177181
name: "created_at".to_string(),
178182
type_: FieldType::Named(Ident::new("Date", Span::call_site())),
179183
},
@@ -184,13 +188,16 @@ mod tests {
184188
context.schema.objects.insert(
185189
"Organization".to_string(),
186190
GqlObject {
191+
description: None,
187192
name: "Organization".to_string(),
188193
fields: vec![
189194
GqlObjectField {
195+
description: None,
190196
name: "title".to_string(),
191197
type_: FieldType::Named(Ident::new("String", Span::call_site())),
192198
},
193199
GqlObjectField {
200+
description: None,
194201
name: "created_at".to_string(),
195202
type_: FieldType::Named(Ident::new("Date", Span::call_site())),
196203
},
@@ -242,21 +249,26 @@ mod tests {
242249
context.schema.objects.insert(
243250
"User".to_string(),
244251
GqlObject {
252+
description: None,
245253
name: "User".to_string(),
246254
fields: vec![
247255
GqlObjectField {
256+
description: None,
248257
name: "__typename".to_string(),
249258
type_: FieldType::Named(string_type()),
250259
},
251260
GqlObjectField {
261+
description: None,
252262
name: "first_name".to_string(),
253263
type_: FieldType::Named(string_type()),
254264
},
255265
GqlObjectField {
266+
description: None,
256267
name: "last_name".to_string(),
257268
type_: FieldType::Named(string_type()),
258269
},
259270
GqlObjectField {
271+
description: None,
260272
name: "created_at".to_string(),
261273
type_: FieldType::Named(Ident::new("Date", Span::call_site())),
262274
},
@@ -267,17 +279,21 @@ mod tests {
267279
context.schema.objects.insert(
268280
"Organization".to_string(),
269281
GqlObject {
282+
description: None,
270283
name: "Organization".to_string(),
271284
fields: vec![
272285
GqlObjectField {
286+
description: None,
273287
name: "__typename".to_string(),
274288
type_: FieldType::Named(string_type()),
275289
},
276290
GqlObjectField {
291+
description: None,
277292
name: "title".to_string(),
278293
type_: FieldType::Named(Ident::new("String", Span::call_site())),
279294
},
280295
GqlObjectField {
296+
description: None,
281297
name: "created_at".to_string(),
282298
type_: FieldType::Named(Ident::new("Date", Span::call_site())),
283299
},

0 commit comments

Comments
 (0)