#traits #impl #async

macro no-std trait-make

Utilities for working with impl traits in Rust

1 unstable release

0.1.0 Feb 17, 2024

#92 in #impl

Download history 703/week @ 2025-09-20 907/week @ 2025-09-27 836/week @ 2025-10-04 1382/week @ 2025-10-11 924/week @ 2025-10-18 470/week @ 2025-10-25 561/week @ 2025-11-01 451/week @ 2025-11-08 509/week @ 2025-11-15 445/week @ 2025-11-22 490/week @ 2025-11-29 456/week @ 2025-12-06 521/week @ 2025-12-13 571/week @ 2025-12-20 504/week @ 2025-12-27 665/week @ 2026-01-03

2,335 downloads per month
Used in 10 crates (2 directly)

MIT/Apache

15KB
239 lines

Latest Version Documentation GHA Status License

fork from https://github.com/rust-lang/impl-trait-utils

trait_variant is a good lib, but it still doesn't support default method, so fork it and create a new lib trait-make to support default method

users can replace trait_variant with a few change

trait_make

trait_make 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_make::make(IntFactory: Send)]
trait LocalIntFactory {
    async fn make(&self) -> i32;
    fn stream(&self) -> impl Iterator<Item = i32>;
    fn call(&self) -> u32;
}

The trait_make::make would generate an additional trait called IntFactory:

use core::future::Future;

trait IntFactory: Send {
   fn make(&self) -> impl Future<Output = i32> + Send;
   fn stream(&self) -> impl Iterator<Item = i32> + Send;
   fn call(&self) -> u32;
}

Implementers can choose to implement either LocalIntFactory or IntFactory as appropriate.

For more details, see the docs for trait_make::make.

License and usage notes

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

Dependencies

~145–550KB
~13K SLoC