Educe
This crate provides procedural macros to help you implement Rust-built-in traits quickly.
Debug
Use #[derive(Educe)]
and #[educe(Debug)]
to implement the Debug
trait for a struct, an enum, or a union. It supports to change the name of your types, variants and fields. You can also ignore some fields, or set a trait and/or a method to replace the Debug
trait used by default. Also, you can even format a struct to a tuple, and vice versa.
Basic Usage
extern crate educe;
Change the Name of a Type, a Variant or a Field
The name
attribute can help you rename a type, a variant or a field.
extern crate educe;
Ignore Fields
The ignore
attribute can ignore specific fields.
extern crate educe;
Fake Structs and Tuples
With the named_field
attribute, structs can be formatted as tuples and tuples can be formatted as structs.
extern crate educe;
Use Another Method or Trait to Do the Format Thing
The format
attribute has two parameters: trait
and method
. They can be used to replace the Debug
trait on fields. If you only set the trait
parameter, the method
will be set to fmt
automatically by default.
extern crate educe;
use ;
;
;
Generic Parameters Bound to the Debug
Trait or Others
The #[educe(Debug(bound))]
attribute can be used to add the Debug
trait bound to all generaic parameters for the Debug
implementation.
extern crate educe;
Or you can set the where predicates by yourself.
extern crate educe;
use ;
;
;
Union
A union will be formatted to a u8
slice, because we don't know it's field at runtime. The fields of a union cannot be ignored, renamed or formated with other methods or traits.
extern crate educe;
PartialEq
Use #[derive(Educe)]
and #[educe(ParitalEq)]
to implement the ParitalEq
trait for a struct or an enum. It supports to ignore some fields, or set a trait and/or a method to replace the ParitalEq
trait used by default.
Basic Usage
extern crate educe;
Ignore Fields
The ignore
attribute can ignore specific fields.
extern crate educe;
Use Another Method or Trait to Do Comparing
The compare
attribute has two parameters: trait
and method
. They can be used to replace the PartialEq
trait on fields. If you only set the trait
parameter, the method
will be set to hacomparesh
automatically by default.
extern crate educe;
Generic Parameters Bound to the PartialEq
Trait or Others
The #[educe(PartialEq(bound))]
attribute can be used to add the PartialEq
trait bound to all generaic parameters for the PartialEq
implementation.
extern crate educe;
Or you can set the where predicates by yourself.
extern crate educe;
Eq
Use #[derive(Educe)]
and #[educe(Eq)]
to implement the Eq
trait for a struct, an enum or a union.
Basic Usage
extern crate educe;
Generic Parameters Bound to the Eq
Trait or Others
The #[educe(Eq(bound))]
attribute can be used to add the Eq
trait bound to all generaic parameters for the Eq
implementation.
extern crate educe;
Or you can set the where predicates by yourself. (NOTE: The Eq
trait depends on the PartialEq
(PartialEq<Self>
) trait.)
extern crate educe;
Hash
Use #[derive(Educe)]
and #[educe(Hash)]
to implement the Hash
trait for a struct or an enum. It supports to ignore some fields, or set a trait and/or a method to replace the Hash
trait used by default.
Basic Usage
extern crate educe;
Ignore Fields
The ignore
attribute can ignore specific fields.
extern crate educe;
Use Another Method or Trait to Do Hashing
The hash
attribute has two parameters: trait
and method
. They can be used to replace the Hash
trait on fields. If you only set the trait
parameter, the method
will be set to hash
automatically by default.
extern crate educe;
use ;
;
;
Generic Parameters Bound to the Hash
Trait or Others
The #[educe(Hash(bound))]
attribute can be used to add the Hash
trait bound to all generaic parameters for the Hash
implementation.
extern crate educe;
Or you can set the where predicates by yourself.
extern crate educe;
use ;
;
;
Default
Use #[derive(Educe)]
and #[educe(Default)]
to implement the Default
trait for a struct, an enum, or a union. It supports to set the default value for your type directly, or set the default values for specific fields.
Basic Usage
For enums and unions, you need to assign a variant (of a enum) and a field (of a union) as default unless the number of variants of an enum or the number of fields of a union is exactly one.
extern crate educe;
union Union
The Default Value for the Whole Type
The #[educe(Default(expression = "expression"))]
attribute can be used to set the default value for your type by an expression.
extern crate educe;
union Union
The Default Values for Specific Fields
The #[educe(Default = literal)]
attribute or the #[educe(Default(expression = "expression"))]
attribute can be used to set the default value for a specific field by a literal value or an expression.
extern crate educe;
union Union
Generic Parameters Bound to the Default
Trait or Others
The #[educe(Default(bound))]
attribute can be used to add the Default
trait bound to all generaic parameters for the Default
implementation.
extern crate educe;
Or you can set the where predicates by yourself.
extern crate educe;
The new
Associated Function
With the #[educe(Default(new))]
attribute, your type will have an extra associated function called new
. That can be used to invoke the default
method of the Default
trait.
extern crate educe;
TODO
There is a lot of work to be done. Unimplemented traits are listed below:
Clone
Copy
PartialOrd
Ord
From
Into
FromStr
TryFrom
Deref
DerefMut
Crates.io
https://crates.io/crates/educe