moxy-derive 0.0.4

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

pub struct ForwardSyntax {
    pub sigs: Vec<syn::Signature>,
    pub skip: bool,
    pub flag: bool,
}

impl ForwardSyntax {
    pub fn parse(attrs: &Attrs) -> syn::Result<Self> {
        let forward_args = attrs.get("forward")?;
        let attr = forward_args.iter().find_map(|a| a.as_attr());
        let skip = attr.map(|a| a.exists("skip")).unwrap_or(false);
        let flag = forward_args
            .iter()
            .any(|a| a.is_flag() && a.path().is_ident("forward"));

        let sigs: Vec<syn::Signature> = attr
            .map(|a| {
                a.args()
                    .iter()
                    .filter_map(|arg| arg.as_signature().cloned())
                    .collect()
            })
            .unwrap_or_default();

        Ok(Self { sigs, skip, flag })
    }
}