#async-trait #traits #impl #async

无std trait-variant

Rust中使用impl特质的实用工具

5个版本

0.1.2 2024年3月18日
0.1.1 2024年1月5日
0.1.0 2023年12月21日
0.0.1 2023年12月18日
0.0.0 2023年12月15日

#136 in 异步

Download history 17588/week @ 2024-04-21 29783/week @ 2024-04-28 29644/week @ 2024-05-05 33247/week @ 2024-05-12 35964/week @ 2024-05-19 34365/week @ 2024-05-26 38506/week @ 2024-06-02 29318/week @ 2024-06-09 28432/week @ 2024-06-16 34945/week @ 2024-06-23 26021/week @ 2024-06-30 25548/week @ 2024-07-07 34997/week @ 2024-07-14 40303/week @ 2024-07-21 31867/week @ 2024-07-28 28269/week @ 2024-08-04

136,163 monthly downloads
用于 42 个crates (21直接)

MIT/Apache

15KB
224

Latest Version Documentation GHA Status License

Rust中使用impl特质的实用工具。

trait_variant

trait_variant生成了一个使用async fn和/或-> impl Trait的基特质的专用版本。

例如,如果您想要您特质的Send版本,您将编写

#[trait_variant::make(IntFactory: Send)]
trait LocalIntFactory {
    async fn make(&self) -> i32;
    fn stream(&self) -> impl Iterator<Item = i32>;
    fn call(&self) -> u32;
}

trait_variant::make会生成一个名为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;
}

实现者可以选择实现LocalIntFactoryIntFactory,具体取决于情况。

有关更多详细信息,请参阅trait_variant::make的文档。

许可证和用法说明

根据您的选择,受Apache License,版本2.0MIT许可证许可。

依赖关系

~295–750KB
~18K SLoC