use proc_macro2::{Ident, TokenStream};
use syn::Fields;
pub fn create_graphql_impl(entity_name: &Ident, fields: &Fields) -> TokenStream {
let graphql_fields = fields.iter().map(|field| {
let field_name_ident = field.ident.clone().unwrap();
let field_name = field_name_ident.to_string();
let field_ty = &field.ty;
let fn_name = Ident::new(
&format!("graphql_{}", field_name_ident),
field_name_ident.span(),
);
quote!(
#[graphql(name = #field_name)]
async fn #fn_name(&self) -> &#field_ty {
&self.#field_name_ident
}
)
});
quote!(
#[async_graphql::Object]
impl #entity_name {
#(#graphql_fields)*
}
)
}