idkthings_core_macros 0.1.0

core macros for idkthings
Documentation
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)*
         }
    )
}