Crate derive_tools

source ·
Expand description

§Module :: derive_tools

experimental rust-status docs.rs Open 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

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.
  • A trait to upcast a clonable entity and clone it. It’s implemented for all entities which can be cloned.
  • 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 with single argument.
  • Constructor with two arguments.
  • Constructor with three arguments.
  • A value-to-value conversion that consumes the input value. The opposite of From.
  • value-to-value conversion that consumes the input value. Change left and rught, but keep semantic of `From1``.
  • 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 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§

  • True clone which is applicable not only to clonable entities, but to trait objects implementing CloneDyn.
  • Clone boxed dyn.

Attribute Macros§

  • Derive macro to generate former for a structure. Former is variation of Builder Pattern.
  • Provides an automatic PhantomData field for a struct based on its generic types.

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.
  • Add a function to enum that allows accessing variants by its discriminant
  • Provides an automatic Index trait implementation when-ever it’s possible.
  • Provides an automatic IndexMut trait implementation when-ever it’s possible.
  • Derive macro to implement From converting outer type into inner when-ever it’s possible to do automatically.
  • What #[derive(Into)] generates
  • Using #[derive(IntoIterator)]
  • Implements From<MyEnum> for &'static str on an enum.
  • What #[derive(IsVariant)] generates
  • What #[derive(Mul)] generates
  • What #[derive(MulAssign)] generates
  • Provides an automatic new implementation for struct wrapping a single value.
  • Provides an automatic Not trait implementation for struct.
  • 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
  • The derive_variadic_from macro is designed to provide a way to implement the From-like traits for structs with a variable number of fields, allowing them to be constructed from tuples of different lengths or from individual arguments. This functionality is particularly useful for creating flexible constructors that enable different methods of instantiation for a struct. By automating the implementation of traits, this macro reduces boilerplate code and enhances code readability and maintainability.