1 unstable release
0.5.1 | Nov 30, 2021 |
---|
#26 in #impl-block
60KB
860 lines
auto_impl
A proc-macro attribute for automatically implementing a trait for references, some common smart pointers and closures.
Usage
This library requires Rust 1.37.0 or newer.
Add auto_impl
to your Cargo.toml
and just use it in your crate:
// In Rust 2015 you still need `extern crate auto_impl;` at your crate root
use auto_impl::auto_impl;
Add an auto_impl
attribute to traits you want to automatically implement for wrapper types. Here is a small example:
// This will generate two additional impl blocks: one for `&T` and one
// for `Box<T>` where `T: Foo`.
#[auto_impl(&, Box)]
trait Foo {
fn foo(&self);
}
impl Foo for i32 {
fn foo(&self) {}
}
fn requires_foo(_: impl Foo) {}
requires_foo(0i32); // works: through the impl we defined above
requires_foo(&0i32); // works: through the generated impl
requires_foo(Box::new(0i32)); // works: through the generated impl
For more explanations, please see the documentation and for more examples, see the examples folder.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
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
~1.5MB
~36K SLoC