zephyrus-macros 0.11.0

Procedural macros used by Zephyrus
Documentation
use darling::FromMeta;
use quote::ToTokens;
use syn::Meta;

#[derive(Clone)]
pub struct Ident(syn::Ident);

impl FromMeta for Ident {
    fn from_meta(item: &Meta) -> darling::Result<Self> {
        match item {
            Meta::Path(p) if p.get_ident().is_some() => Ok(Self(p.get_ident().unwrap().clone())),
            _ => Err(darling::Error::custom("Expected identifier"))
        }
    }

    fn from_value(value: &syn::Lit) -> darling::Result<Self> {
        Ok(Self(<syn::Ident as FromMeta>::from_value(value)?))
    }

    fn from_string(value: &str) -> darling::Result<Self> {
        Ok(Self(<syn::Ident as FromMeta>::from_string(value)?))
    }
}

impl ToTokens for Ident {
    fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
        <syn::Ident as ToTokens>::to_tokens(&self.0, tokens)
    }
}