assert_type_match/
utils.rsuse crate::fields::FieldArgs;
use crate::variants::VariantArgs;
use crate::ATTRIBUTE;
use syn::{Attribute, Field, Member};
pub(crate) fn extract_cfg_attrs(attrs: &[Attribute]) -> impl Iterator<Item = &Attribute> {
attrs.iter().filter(|attr| attr.path().is_ident("cfg"))
}
pub(crate) fn extract_field_args(attrs: &[Attribute]) -> syn::Result<FieldArgs> {
let mut args = FieldArgs::default();
for attr in attrs.iter().filter(|attr| attr.path().is_ident(ATTRIBUTE)) {
args = args.merge(attr.parse_args::<FieldArgs>()?)?;
}
Ok(args)
}
pub(crate) fn extract_variant_args(attrs: &[Attribute]) -> syn::Result<VariantArgs> {
let mut args = VariantArgs::default();
for attr in attrs.iter().filter(|attr| attr.path().is_ident(ATTRIBUTE)) {
args = args.merge(attr.parse_args::<VariantArgs>()?)?;
}
Ok(args)
}
pub(crate) fn create_member(field: &Field, index: usize) -> Member {
field
.ident
.clone()
.map(Member::from)
.unwrap_or_else(|| Member::from(index))
}
pub(crate) fn try_unzip<I, C, T, E>(iter: I) -> Result<C, E>
where
I: IntoIterator<Item = Result<T, E>>,
C: Extend<T> + Default,
{
iter.into_iter().try_fold(C::default(), |mut c, r| {
c.extend([r?]);
Ok(c)
})
}