pub( crate ) mod private
{
  use crate::prelude::*;
  use core::fmt;
  use core::hash::Hash;
      
  pub trait NodeKindInterface
  where
    Self :
      'static +
      Copy +
      fmt::Debug +
      PartialEq +
            Hash  +
      Default +
    ,
  {
  }
  impl< T > NodeKindInterface for T
  where
    T :
      'static +
      Copy +
      fmt::Debug +
      PartialEq +
            Hash  +
      Default +
    ,
  {
  }
      
  #[ derive( Debug, PartialEq, Eq, Copy, Clone, Hash, Default ) ]
  pub struct NodeKindless();
      
  pub trait NodeBasicInterface
  where
    Self :
      HasId +
  {
  }
}
pub mod protected
{
  pub use super::orphan::*;
}
pub use protected::*;
pub mod orphan
{
  pub use super::exposed::*;
}
pub mod exposed
{
  pub use super::prelude::*;
  pub use super::private::NodeKindless;
}
pub use exposed::*;
pub mod prelude
{
  pub use super::private::
  {
    NodeKindInterface,
    NodeBasicInterface,
  };
}