Crate derive_tools

source ·
Expand description

Collection of derives which extend STD.

§Module :: derive_tools

experimentalrust-statusdocs.rsOpen in Gitpod discord

§Basic use-case

{
  use derive_tools::*;

  #[ derive( From, InnerFrom, Display, FromStr, PartialEq, Debug ) ]
  #[ display( "{a}-{b}" ) ]
  struct Struct1
  {
    a : i32,
    b : i32,
  }

  // derived InnerFrom
  let src = Struct1 { a : 1, b : 3 };
  let got : ( i32, i32 ) = src.into();
  let exp = ( 1, 3 );
  assert_eq!( got, exp );

  // derived From
  let src : Struct1 = ( 1, 3 ).into();
  let got : ( i32, i32 ) = src.into();
  let exp = ( 1, 3 );
  assert_eq!( got, exp );

  // derived Display
  let src = Struct1 { a : 1, b : 3 };
  let got = format!( "{}", src );
  let exp = "1-3";
  println!( "{}", got );
  assert_eq!( got, exp );

  // derived FromStr
  use std::str::FromStr;
  let src = Struct1::from_str( "1-3" );
  let exp = Ok( Struct1 { a : 1, b : 3 } );
  assert_eq!( src, exp );

}

§To add to your project

cargo add derive_tools

§Try out from the repository

git clone https://github.com/Wandalen/wTools
cd wTools
cd examples/derive_tools_trivial
cargo run

Re-exports§

Modules§

Macros§

  • Variadic constructor.

Enums§

  • The ParseError enum is a collection of all the possible reasons an enum can fail to parse from a string.

Traits§

  • The addition operator +.
  • The addition assignment operator +=.
  • AsStaticRefDeprecated
    A cheap reference-to-reference conversion. Used to convert a value to a reference value with 'static lifetime within generic code.
  • The division operator /.
  • The division assignment operator /=.
  • A trait for capturing the number of variants in Enum. This trait can be autoderived by strum_macros.
  • Associates additional pieces of information with an Enum. This can be autoimplemented by deriving EnumMessage and annotating your variants with #[strum(message="...")].
  • EnumProperty is a trait that makes it possible to store additional information with enum variants. This trait is designed to be used with the macro of the same name in the strum_macros crate. Currently, the only string literals are supported in attributes, the other methods will be implemented as additional attribute types become stabilized.
  • Error is a trait representing the basic expectations for error values, i.e., values of type E in Result<T, E>.
  • Constructor without arguments. Alias of Default.
  • Constructor with single argument.
  • Constructor with two arguments.
  • Constructor with three arguments.
  • Used for indexing operations (container[index]) in immutable contexts.
  • Used for indexing operations (container[index]) in mutable contexts.
  • value-to-value conversion that consumes the input value. Change left and rught, but keep semantic of `From_1``.
  • This trait designates that an Enum can be iterated over. It can be auto generated using strum_macros on your behalf.
  • Conversion into an Iterator.
  • The multiplication operator *.
  • The multiplication assignment operator *=.
  • The unary logical negation operator !.
  • The subtraction operator -.
  • The subtraction assignment operator -=.
  • Trait to represent types that can be created by summing up an iterator.
  • An attempted conversion that consumes self, which may or may not be expensive.
  • A trait for retrieving the names of each variant in Enum. This trait can be autoderived by strum_macros.

Functions§

Attribute Macros§

  • Derive macro to generate former for a structure. Former is variation of Builder Pattern.

Derive Macros§

  • What #[derive(Add)] generates
  • What #[derive(AddAssign)] generates
  • Derive macro to implement AsMut when-ever it’s possible to do automatically.
  • Derive macro to implement AsRef when-ever it’s possible to do automatically.
  • Converts enum variants to &'static str.
  • What #[derive(Constructor)] generates
  • Derive macro to implement Deref when-ever it’s possible to do automatically.
  • Derive macro to implement Deref when-ever it’s possible to do automatically.
  • What #[derive(Mul)] generates
  • What #[derive(MulAssign)] generates
  • Add a constant usize equal to the number of variants.
  • Generate a new type with only the discriminant names.
  • Generated is_*() methods for each variant. E.g. Color.is_red().
  • Creates a new type that iterates of the variants of an enum.
  • Add a verbose message to an enum variant.
  • Add custom properties to enum variants.
  • Converts strings to enum variants based on their name.
  • Generated try_as_*() methods for all tuple-style variants. E.g. Message.try_as_write().
  • Implements Strum::VariantNames which adds an associated constant VARIANTS which is an array of discriminant names.
  • Using #[derive(Error)]
  • Provides an automatic From implementation for struct wrapping a single value.
  • Alias for derive From. Provides an automatic From implementation for struct wrapping a single value.
  • Add a function to enum that allows accessing variants by its discriminant
  • What #[derive(Index)] generates
  • What #[derive(IndexMut)] generates
  • Derive macro to implement From converting outer type into inner when-ever it’s possible to do automatically.
  • Using #[derive(IntoIterator)]
  • Implements From<MyEnum> for &'static str on an enum.
  • What #[derive(IsVariant)] generates
  • What #[derive(Mul)] generates
  • What #[derive(MulAssign)] generates
  • What #[derive(Not)] generates
  • What #[derive(Add)] generates
  • What #[derive(AddAssign)] generates
  • Using #[derive(Sum)]
  • implements std::string::ToString on an enum
  • What #[derive(TryInto)] generates
  • What #[derive(Unwrap)] generates
  • Derive macro to implement default constructors From_0, From_1, From_2, From_3.