non_std 0.1.4

Collection of general purpose tools for solving problems. Fundamentally extend the language without spoiling, so may be used solely or in conjunction with another module of such kind.
Documentation
/// Internal namespace.
pub( crate ) mod private
{

  ///
  /// Trait to get name of an syntax element.
  ///

  pub trait Name
  {
    /// Get name.
    fn name( &self ) -> String;
  }

  impl Name for syn::Item
  {
    fn name( &self ) -> String
    {
      match self
      {
        syn::Item::Const( item ) => item.name(),
        syn::Item::Enum( item ) => item.name(),
        syn::Item::ExternCrate( item ) => item.name(),
        syn::Item::Fn( item ) => item.name(),
        // syn::Item::ForeignMod( item ) => item.name(),
        syn::Item::Impl( item ) => item.name(),
        syn::Item::Macro( item ) => item.name(),
        syn::Item::Macro2( item ) => item.name(),
        syn::Item::Mod( item ) => item.name(),
        syn::Item::Static( item ) => item.name(),
        syn::Item::Struct( item ) => item.name(),
        syn::Item::Trait( item ) => item.name(),
        syn::Item::TraitAlias( item ) => item.name(),
        syn::Item::Type( item ) => item.name(),
        syn::Item::Union( item ) => item.name(),
        // syn::Item::Use( item ) => item.name(),
        // syn::Item::Verbatim( item ) => item.name(),
        _ => "".into(),
      }
    }
  }

  impl Name for syn::Path
  {
    fn name( &self ) -> String
    {
      let first = self.segments.first();
      if first.is_none()
      {
        return "".into()
      }
      let first = first.unwrap();
      first.ident.to_string()
    }
  }

  impl Name for syn::ItemConst
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemEnum
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemExternCrate
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemFn
  {
    fn name( &self ) -> String
    {
      self.sig.ident.to_string()
    }
  }

  // impl Name for syn::ItemForeignMod
  // {
  //   fn name( &self ) -> String
  //   {
  //     self.ident.to_string()
  //   }
  // }

  impl Name for syn::ItemImpl
  {
    fn name( &self ) -> String
    {
      if self.trait_.is_none()
      {
        return "".into()
      }
      let t = self.trait_.as_ref().unwrap();
      t.1.name()
    }
  }

  impl Name for syn::ItemMacro
  {
    fn name( &self ) -> String
    {
      if self.ident.is_none()
      {
        return "".to_string()
      }
      let ident = self.ident.as_ref().unwrap();
      ident.to_string()
    }
  }

  impl Name for syn::ItemMacro2
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemMod
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemStatic
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemStruct
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemTrait
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemTraitAlias
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemType
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  impl Name for syn::ItemUnion
  {
    fn name( &self ) -> String
    {
      self.ident.to_string()
    }
  }

  // impl Name for syn::ItemUse
  // {
  //   fn name( &self ) -> String
  //   {
  //     self.ident.to_string()
  //   }
  // }

  // impl Name for syn::ItemVerbatim
  // {
  //   fn name( &self ) -> String
  //   {
  //     self.ident.to_string()
  //   }
  // }

//
//     Const(ItemConst),
//     Enum(ItemEnum),
//     ExternCrate(ItemExternCrate),
//     Fn(ItemFn),
//     ForeignMod(ItemForeignMod),
//     Impl(ItemImpl),
//     Macro(ItemMacro),
//     Macro2(ItemMacro2),
//     Mod(ItemMod),
//     Static(ItemStatic),
//     Struct(ItemStruct),
//     Trait(ItemTrait),
//     TraitAlias(ItemTraitAlias),
//     Type(ItemType),
//     Union(ItemUnion),
//     Use(ItemUse),
//     Verbatim(TokenStream),
}

/// Exposed namespace of the module.
pub mod exposed
{
  pub use super::prelude::*;
}

pub use exposed::*;

/// Prelude to use essentials: `use my_module::prelude::*`.
pub mod prelude
{
  pub use super::private::Name;
}