neon-macros 1.1.0

Procedural macros supporting Neon
Documentation
#[derive(Default)]
pub(crate) struct Meta {
    pub(super) name: Option<syn::LitStr>,
    pub(super) json: bool,
}

pub(crate) struct Parser;

impl syn::parse::Parser for Parser {
    type Output = Meta;

    fn parse2(self, tokens: proc_macro2::TokenStream) -> syn::Result<Self::Output> {
        let mut attr = Meta::default();
        let parser = syn::meta::parser(|meta| {
            if meta.path.is_ident("name") {
                attr.name = Some(meta.value()?.parse::<syn::LitStr>()?);

                return Ok(());
            }

            if meta.path.is_ident("json") {
                attr.json = true;

                return Ok(());
            }

            Err(meta.error("unsupported property"))
        });

        parser.parse2(tokens)?;

        Ok(attr)
    }
}