9 releases
| 0.1.8 | May 5, 2024 |
|---|---|
| 0.1.7 | Oct 2, 2023 |
| 0.1.6 | Sep 25, 2023 |
| 0.1.5 | Aug 25, 2023 |
| 0.1.1 | May 5, 2022 |
#2775 in Rust patterns
113,601 downloads per month
Used in 85 crates
(10 directly)
145KB
3K
SLoC
derive-ex
Improved version of the macro to implement the traits defined in the standard library.
Documentation
See #[derive_ex] documentation for details.
Differences from standard derive macros
- A trait bound that is automatically generated is smarter.
- You can specify trait bound manually.
- You can specify default values for each field.
- You can specify comparison method for each field.
- You can specify ignored field with the derivation of
Debug. - Support derive
Clone::clone_from. - Support derive operators. (
Add,AddAssign,Not,Deref, etc.)
Supported traits
CopyCloneDebugDefaultOrd,PartialOrd,Eq,PartialEq,Hash- operators
- Add-like (
Add,Sub,Mul,Shl, etc.) - AddAssign-like (
AddAssign,SubAssign,MulAssign,ShlAssign, etc.) - Not-like (
Not,Neg) Deref,DerefMut
- Add-like (
Unsupported traits
The following traits are not supported as more suitable crates exist.
| trait | crate |
|---|---|
Display, FromStr |
parse-display |
Error |
thiserror |
Install
Add this to your Cargo.toml:
[dependencies]
derive-ex = "0.1.7"
Example
use derive_ex::derive_ex;
#[derive(Eq, PartialEq, Debug)]
#[derive_ex(Add, AddAssign, Clone, Default)]
struct X {
#[default(10)]
a: u32,
}
assert_eq!(X { a: 1 } + X { a: 2 }, X { a: 3 });
assert_eq!(X::default(), X { a: 10 });
#[derive(Eq, PartialEq, Debug)]
#[derive_ex(Clone, Default)]
enum Y {
A,
#[default]
B,
}
assert_eq!(Y::default(), Y::B);
License
This project is dual licensed under Apache-2.0/MIT. See the two LICENSE-* files for details.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Dependencies
~185–580KB
~13K SLoC