The derive
attribute allows certain traits to be automatically implemented for data structures. The reference gives the example:
#[derive(PartialEq, Clone)]
struct Foo<T> {
a: i32,
b: T
}
Is it possible to add your own derivable traits, or are these fixed by the compiler?
A small number of derivable traits are hard-coded in the compiler.
Rust 1.15 stabilized procedural macros which allow for the creation of custom derive
attributes. If you need to support stable versions of Rust before 1.15, there is a crate that uses macro hackery to derive custom traits.
The release of Rust 1.15 allows custom traits to be derived. They easiest way to do this is by using the syn and quote crates.