@@ -5,18 +5,24 @@ use proc_macro2::{Ident, Span, TokenStream};
5
5
use query:: QueryContext ;
6
6
use selection:: * ;
7
7
8
- pub ( crate ) fn render_object_field ( field_name : & str , field_type : & TokenStream ) -> TokenStream {
8
+ pub ( crate ) fn render_object_field (
9
+ field_name : & str ,
10
+ field_type : & TokenStream ,
11
+ description : Option < & str > ,
12
+ ) -> TokenStream {
13
+ let description = description. map ( |s| quote ! ( #[ doc = #s] ) ) ;
9
14
if field_name == "type" {
10
15
let name_ident = Ident :: new ( & format ! ( "{}_" , field_name) , Span :: call_site ( ) ) ;
11
16
return quote ! {
17
+ #description
12
18
#[ serde( rename = #field_name) ]
13
19
pub #name_ident: #field_type
14
20
} ;
15
21
}
16
22
17
23
let name_ident = Ident :: new ( & field_name. to_snake_case ( ) , Span :: call_site ( ) ) ;
18
24
19
- quote ! ( pub #name_ident: #field_type)
25
+ quote ! ( #description pub #name_ident: #field_type)
20
26
}
21
27
22
28
pub ( crate ) fn field_impls_for_selection (
@@ -62,16 +68,19 @@ pub fn response_fields_for_selection(
62
68
SelectionItem :: Field ( f) => {
63
69
let name = & f. name ;
64
70
65
- let ty = & schema_fields
71
+ let schema_field = & schema_fields
66
72
. iter ( )
67
73
. find ( |field| field. name . as_str ( ) == name. as_str ( ) )
68
- . ok_or_else ( || format_err ! ( "Could not find field: {}" , name. as_str( ) ) ) ?
69
- . type_ ;
70
- let ty = ty. to_rust (
74
+ . ok_or_else ( || format_err ! ( "Could not find field: {}" , name. as_str( ) ) ) ?;
75
+ let ty = schema_field. type_ . to_rust (
71
76
context,
72
77
& format ! ( "{}{}" , prefix. to_camel_case( ) , name. to_camel_case( ) ) ,
73
78
) ;
74
- Ok ( render_object_field ( name, & ty) )
79
+ Ok ( render_object_field (
80
+ name,
81
+ & ty,
82
+ schema_field. description . as_ref ( ) . map ( |s| s. as_str ( ) ) ,
83
+ ) )
75
84
}
76
85
SelectionItem :: FragmentSpread ( fragment) => {
77
86
let field_name =
0 commit comments