use syn::Field; use crate::Result; /// Creates an instance by parsing an individual field and its attributes. pub trait FromField: Sized { fn from_field(field: &Field) -> Result; } impl FromField for () { fn from_field(_: &Field) -> Result { Ok(()) } } impl FromField for Field { fn from_field(field: &Field) -> Result { Ok(field.clone()) } } impl FromField for syn::Type { fn from_field(field: &Field) -> Result { Ok(field.ty.clone()) } } impl FromField for syn::Visibility { fn from_field(field: &Field) -> Result { Ok(field.vis.clone()) } } impl FromField for Vec { fn from_field(field: &Field) -> Result { Ok(field.attrs.clone()) } }