r[attributes.derive]
r[attributes.derive.intro] The derive attribute allows new items to be automatically generated for data structures.
r[attributes.derive.syntax] It uses the [MetaListPaths] syntax to specify a list of traits to implement or paths to derive macros to process.
For example, the following will create an impl item for the [PartialEq] and [Clone] traits for Foo, and the type parameter T will be given the PartialEq or Clone constraints for the appropriate impl:
#[derive(PartialEq, Clone)] struct Foo<T> { a: i32, b: T, }
The generated impl for PartialEq is equivalent to
# struct Foo<T> { a: i32, b: T } impl<T: PartialEq> PartialEq for Foo<T> { fn eq(&self, other: &Foo<T>) -> bool { self.a == other.a && self.b == other.b } }
r[attributes.derive.proc-macro] You can implement derive for your own traits through procedural macros.
r[attributes.derive.automatically_derived]
automatically_derived attributeThe automatically_derived attribute is automatically added to implementations created by the derive attribute for built-in traits. It has no direct effect, but it may be used by tools and diagnostic lints to detect these automatically generated implementations.