Utilities for working with impl traits in Rust.
trait_variant
generates a specialized version of a base trait that uses async fn
and/or -> impl Trait
. For example, if you want a Send
able version of your trait, you'd write:
#[trait_variant::make(IntFactory: Send)]
trait LocalIntFactory {
async fn make(&self) -> i32;
// ..or..
fn stream(&self) -> impl Iterator<Item = i32>;
}
Which creates a new IntFactory: Send
trait and additionally bounds IntFactory::make(): Send
and IntFactory::stream(): Send
. Implementers of the trait can choose to implement the variant instead of the original trait.
For more details, see the docs for trait_variant::make
.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.