pub( crate ) mod private
{
use crate::*;
pub fn field_types< 'a >( t : &'a syn::ItemStruct ) -> impl IterTrait< 'a, syn::Type > + Clone
{
t.fields.iter().map( | field | &field.ty )
}
pub fn field_names< 'a >( t : &'a syn::ItemStruct ) -> Option< Box< dyn IterTrait< 'a, 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,
}
}
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() )
}
return Err( syn_err!( t.span(), "Expects at least one field" ) );
}
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() )
}
return Err( syn_err!( t.span(), "Expects type for fields" ) );
}
}
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use protected::*;
pub mod protected
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::orphan::*;
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::private::
{
field_types,
field_names,
first_field_type,
first_field_name,
};
}
pub mod orphan
{
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::exposed::*;
}
pub mod exposed
{
pub use super::protected as item_struct;
#[ doc( inline ) ]
#[ allow( unused_imports ) ]
pub use super::prelude::*;
}
pub mod prelude
{
}