use proc_macro2::{Punct, TokenStream};
use crate::ParseResult;
use crate::class::Field;
use crate::util::bail;
pub struct Fields {
pub all_fields: Vec<Field>,
pub base_field: Option<Field>,
pub deprecations: Vec<TokenStream>,
pub errors: Vec<venial::Error>,
pub has_tool_button: bool,
}
pub fn named_fields(
class: &venial::Struct,
derive_macro_name: &str,
) -> ParseResult<Vec<(venial::NamedField, Punct)>> {
match &class.fields {
venial::Fields::Unit => Ok(vec![]),
venial::Fields::Tuple(_) => bail!(
&class.fields,
"{derive_macro_name} is not supported for tuple structs",
)?,
venial::Fields::Named(fields) => Ok(fields.fields.inner.clone()),
}
}