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")),
})
}
}