iderive: Inner Derive
iderive is a drop-in replacement for derive that doesn't directly depend
on generic bounds. It only checks the types of a struct's fields when deriving
a trait.
Example
let a = ;
let b = a;
let c = a; // Error: Value used after move
This won't work because derive requires that T implements Copy for
TaggedIndex to be able to derive it.
In contrast, iderive only checks the struct's fields to determine if a
trait can be derived. Because usize and PhantomData<T> implements Copy
regardless of the type of T, iderive(Copy) will implement Copy for
TaggedIndex:
let a = ;
let b = a;
let c = a; // Works!
Supported traits
iderive is currently implemented for Clone, Copy, Debug,
Default, PartialEq, Eq, PartialOrd, Ord and Hash.
Recent changes
-
1.2.4
- Fix parsing of where clauses
-
1.2.3
- Fix parsing of field visibility, attributes and function trait bounds
-
1.2.0
- Rewrite; iderive now has no dependencies
- Don't use canonical implementations, because this breaks if the other trait fails bounds
See CHANGELOG.md for older changes