use syn::{
punctuated::Punctuated, spanned::Spanned, token::Comma, Data, DataEnum, DataUnion, Error,
Field, Fields,
};
pub fn get_struct_fields<'a>(
data: &'a Data,
meta: &str,
) -> syn::Result<&'a Punctuated<Field, Comma>> {
match data {
Data::Struct(data_struct) => match &data_struct.fields {
Fields::Named(fields_named) => Ok(&fields_named.named),
Fields::Unnamed(fields_unnamed) => Ok(&fields_unnamed.unnamed),
Fields::Unit => Ok(const { &Punctuated::new() }),
},
Data::Enum(DataEnum { enum_token, .. }) => Err(Error::new(
enum_token.span(),
format!("#[{meta}] only supports structs, not enums"),
)),
Data::Union(DataUnion { union_token, .. }) => Err(Error::new(
union_token.span(),
format!("#[{meta}] only supports structs, not unions"),
)),
}
}