pub( crate ) mod private
{
#[ derive( Debug ) ]
pub struct GenericsAnalysis
{
pub generics : syn::Generics,
pub names : Vec< syn::Ident >,
}
pub trait GenericsAnalyze
{
fn generics_analyze( &self ) -> GenericsAnalysis;
}
impl GenericsAnalyze for syn::ItemTrait
{
fn generics_analyze( &self ) -> GenericsAnalysis
{
let mut names = vec![];
let generics = self.generics.clone();
for param in &generics.params
{
match param
{
syn::GenericParam::Type( type_param ) => names.push( type_param.ident.clone() ),
syn::GenericParam::Lifetime( lifetime_def ) => names.push( lifetime_def.lifetime.ident.clone() ),
syn::GenericParam::Const( const_param ) => names.push( const_param.ident.clone() ),
}
}
GenericsAnalysis
{
generics,
names,
}
}
}
}
pub mod protected
{
pub use super::orphan::*;
}
pub use protected::*;
pub mod orphan
{
pub use super::exposed::*;
}
pub mod exposed
{
pub use super::
{
prelude::*,
private::GenericsAnalysis,
};
}
pub mod prelude
{
pub use super::
{
private::GenericsAnalyze,
};
}