fieldx_core 0.2.3

Various types and tools useful implementing fieldx_derive core functionality. May provide useful APIs for 3rd-party crates.
Documentation
pub mod codegen;
pub mod field;

pub use codegen::FXCodeGenCtx;
pub use field::FXFieldCtx;

use quote::ToTokens;

#[derive(Debug)]
pub(crate) struct Attributizer(Vec<syn::Attribute>);

impl Attributizer {
    pub(crate) fn into_inner(self) -> Vec<syn::Attribute> {
        self.0
    }

    #[inline]
    pub(crate) fn parse<T: ToTokens>(attrs: T) -> syn::Result<Self> {
        syn::parse2(attrs.to_token_stream())
    }
}

impl syn::parse::Parse for Attributizer {
    #[inline]
    fn parse(input: syn::parse::ParseStream) -> syn::Result<Self> {
        Ok(Self(input.call(syn::Attribute::parse_outer)?))
    }
}

#[cfg(test)]
mod test {
    use super::Attributizer;

    #[test]
    fn test_attributizer() {
        let attrs = Attributizer::parse(quote::quote! {
            #[derive(Debug)]
            #[cfg(test)]
            #[allow(dead_code)]
        })
        .expect("Parse attributes:");

        let inner_attrs = attrs.into_inner();
        assert_eq!(inner_attrs.len(), 3);
        assert!(inner_attrs[0].path().is_ident("derive"));
        assert!(inner_attrs[1].path().is_ident("cfg"));
        assert!(inner_attrs[2].path().is_ident("allow"));
    }
}