@@ -5,18 +5,24 @@ use proc_macro2::{Ident, Span, TokenStream};
55use query:: QueryContext ;
66use selection:: * ;
77
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] ) ) ;
914 if field_name == "type" {
1015 let name_ident = Ident :: new ( & format ! ( "{}_" , field_name) , Span :: call_site ( ) ) ;
1116 return quote ! {
17+ #description
1218 #[ serde( rename = #field_name) ]
1319 pub #name_ident: #field_type
1420 } ;
1521 }
1622
1723 let name_ident = Ident :: new ( & field_name. to_snake_case ( ) , Span :: call_site ( ) ) ;
1824
19- quote ! ( pub #name_ident: #field_type)
25+ quote ! ( #description pub #name_ident: #field_type)
2026}
2127
2228pub ( crate ) fn field_impls_for_selection (
@@ -62,16 +68,19 @@ pub fn response_fields_for_selection(
6268 SelectionItem :: Field ( f) => {
6369 let name = & f. name ;
6470
65- let ty = & schema_fields
71+ let schema_field = & schema_fields
6672 . iter ( )
6773 . 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 (
7176 context,
7277 & format ! ( "{}{}" , prefix. to_camel_case( ) , name. to_camel_case( ) ) ,
7378 ) ;
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+ ) )
7584 }
7685 SelectionItem :: FragmentSpread ( fragment) => {
7786 let field_name =
0 commit comments