moxy-derive 0.0.4

derive macros for moxy crate
Documentation
use crate::core::Field;

pub struct GetSyntax {
    pub copy: bool,
    pub clone: bool,
    pub mutable: bool,
    pub custom_name: Option<syn::Ident>,
    pub on: Option<proc_macro2::TokenStream>,
}

impl GetSyntax {
    pub fn parse(field: &Field) -> syn::Result<Self> {
        let get_args = field.attrs().get("get")?;
        let attr = get_args.iter().find_map(|arg| arg.as_attr());
        let has_modifier = |name: &str| -> bool {
            attr.is_some_and(|a| a.args().iter().any(|arg| arg.path().is_ident(name)))
        };

        Ok(Self {
            copy: has_modifier("copy"),
            clone: has_modifier("clone"),
            mutable: has_modifier("mutable"),
            custom_name: attr.and_then(|a| a.get_custom_name()),
            on: attr.and_then(|a| a.get_value_tokens("on")),
        })
    }
}