/impl-trait-utils

Utilities for working with impl traits in Rust.

Primary LanguageRustApache License 2.0Apache-2.0

Latest Version Documentation GHA Status License

Utilities for working with impl traits in Rust.

trait_variant

trait_variant generates a specialized version of a base trait that uses async fn and/or -> impl Trait. For example, if you want a Sendable 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.

License and usage notes

Licensed under either of Apache License, Version 2.0 or MIT license at your option.