use {
inflector::cases::camelcase::to_camel_case,
proc_macro2::Ident,
syn::{DataStruct, Fields, Type},
};
pub fn canonical_ident(ident: &Ident) -> String {
let ident_str = format!("{}", ident);
to_camel_case(&ident_str)
}
pub struct NamedField<'a> {
pub ident: &'a Ident,
pub ty: &'a Type,
pub canon_str: String,
}
pub type NamedFields<'a> = Vec<NamedField<'a>>;
pub fn get_named_fields(data_struct: &DataStruct) -> NamedFields {
let fields_named = match &data_struct.fields {
Fields::Named(fields_named) => fields_named,
_ => panic!("The struct must have named fields"),
};
fields_named
.named
.iter()
.map(|field| {
let ident = field.ident.as_ref().unwrap();
NamedField {
ident: field.ident.as_ref().unwrap(),
ty: &field.ty,
canon_str: canonical_ident(&ident),
}
})
.collect()
}