use syn::{
FieldsUnnamed,
Ident,
Index,
};
use crate::{
field_attributes::FieldAttributes,
internal::UnnamedField,
serde_attributes::SerdeAttributes,
};
pub(crate) fn parse<'a>(
fields: &'a FieldsUnnamed,
type_name: &Ident,
serde_enabled: bool,
) -> syn::Result<Vec<UnnamedField<'a>>> {
fields
.unnamed
.iter()
.enumerate()
.map(|(position, field)| {
let field_name = position.to_string();
let attributes =
FieldAttributes::parse(field, type_name, &field_name)?;
let serde_attributes = SerdeAttributes::parse(
field,
type_name,
&field_name,
serde_enabled,
)?;
Ok(UnnamedField::new(
field,
Index::from(position),
attributes,
serde_attributes,
))
})
.collect()
}