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