mod private
{
use crate :: *;
#[ must_use ]
pub fn field_types(t: &syn ::ItemStruct) -> impl IterTrait< '_, &syn ::Type >
{
t.fields.iter().map(|field| &field.ty)
}
#[ allow( clippy ::match_wildcard_for_single_variants ) ]
#[ must_use ]
pub fn field_names(t: &syn ::ItemStruct) -> Option< BoxedIter<'_, &syn ::Ident >>
{
match &t.fields
{
syn ::Fields ::Named(fields) => Some(Box ::new(fields.named.iter().map(|field| field.ident.as_ref().unwrap()))),
syn ::Fields ::Unit => Some(Box ::new(core ::iter ::empty())),
_ => None,
}
}
#[ allow( clippy ::match_wildcard_for_single_variants ) ]
pub fn first_field_type(t: &syn ::ItemStruct) -> Result< syn ::Type >
{
let maybe_field = match t.fields
{
syn ::Fields ::Named(ref fields) => fields.named.first(),
syn ::Fields ::Unnamed(ref fields) => fields.unnamed.first(),
_ => return Err(syn_err!(t.fields.span(), "Expects either named or unnamed field")),
};
if let Some(field) = maybe_field
{
return Ok(field.ty.clone());
}
Err(syn_err!(t.span(), "Expects at least one field"))
}
#[ allow( clippy ::match_wildcard_for_single_variants ) ]
pub fn first_field_name(t: &syn ::ItemStruct) -> Result< Option< syn ::Ident >>
{
let maybe_field = match t.fields
{
syn ::Fields ::Named(ref fields) => fields.named.first(),
syn ::Fields ::Unnamed(ref fields) => fields.unnamed.first(),
_ => return Err(syn_err!(t.fields.span(), "Expects fields")),
};
if let Some(field) = maybe_field
{
return Ok(field.ident.clone());
}
Err(syn_err!(t.span(), "Expects type for fields"))
}
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use own :: *;
#[ allow( unused_imports ) ]
pub mod own
{
use super :: *;
#[ doc( inline ) ]
pub use orphan :: *;
#[ doc( inline ) ]
pub use private :: { field_types, field_names, first_field_type, first_field_name };
}
#[ allow( unused_imports ) ]
pub mod orphan
{
use super :: *;
#[ doc( inline ) ]
pub use exposed :: *;
}
#[ allow( unused_imports ) ]
pub mod exposed
{
use super :: *;
pub use super ::super ::item_struct;
#[ doc( inline ) ]
pub use prelude :: *;
}
#[ allow( unused_imports ) ]
pub mod prelude
{
use super :: *;
}