castle_macro 0.20.2

Castle Macro, macros to make your life easier
Documentation
use proc_macro2::TokenStream;
use quote::quote_spanned;
use syn::{spanned::Spanned, punctuated::Punctuated, Field, token::Comma};

use crate::Unzip2;




pub fn get_input_def_and_initalizations(fields: &Punctuated<Field, Comma>) -> (Vec<TokenStream>, Vec<TokenStream>) {
    fields
        .iter()
        .map(|field| {
            let name = field.ident.as_ref().unwrap();
            let ty = &field.ty;
            (
                quote_spanned!(ty.span()=> (
                    stringify!(#name).into(), ::castle_api::types::InputDefinition {
                        ident: stringify!(#name).into(),
                        input_kind: <#ty as ::castle_api::types::HasKind>::kind(),
                        default: ::core::option::Option::None,
                        directives: vec![],
                    }
                )),
                quote_spanned!(ty.span()=> <#ty as ::castle_api::types::SchemaItem>::initialize_item(schema)),
            )
        })
        .unzip_n::<Vec<_>, Vec<_>>()
}