pub trait Structural{
const FIELDS:&'static[FieldInfo];
}
pub trait StructuralDyn{
fn fields_info(&self)->&'static[FieldInfo];
}
#[derive(Debug,Copy,Clone,PartialEq,Eq,Hash)]
pub struct FieldInfo{
pub original_name:&'static str,
pub accessor_name:&'static str,
}
impl FieldInfo{
pub const fn not_renamed(name:&'static str)->Self{
Self{
original_name:name,
accessor_name:name,
}
}
}
pub fn accessor_names<T>()->impl ExactSizeIterator<Item=&'static str>+Clone
where
T:Structural
{
T::FIELDS.iter().map(|f|f.accessor_name)
}
pub fn field_names<T>()->impl ExactSizeIterator<Item=&'static str>+Clone
where
T:Structural
{
T::FIELDS.iter().map(|f|f.original_name)
}