#traits #async-trait #impl #async

无std trait-make

Rust中处理impl特质的工具

1 个不稳定版本

0.1.0 2024年2月17日

#1899异步

Download history 1/week @ 2024-03-14 71/week @ 2024-03-21 127/week @ 2024-03-28 171/week @ 2024-04-04 386/week @ 2024-04-11 240/week @ 2024-04-18 327/week @ 2024-04-25 269/week @ 2024-05-02 285/week @ 2024-05-09 368/week @ 2024-05-16 307/week @ 2024-05-23 356/week @ 2024-05-30 1033/week @ 2024-06-06 465/week @ 2024-06-13 350/week @ 2024-06-20 483/week @ 2024-06-27

2,420 每月下载
6 个crate中使用(通过 fuse3

MIT/Apache

15KB
239 代码行

Latest Version Documentation GHA Status License

源自 https://github.com/rust-lang/impl-trait-utils

trait_variant 是一个很好的库,但它仍然不支持默认方法,因此我分支出来创建了一个新的库 trait-make 来支持默认方法

用户可以通过少量更改将 trait_variant 替换掉

trait_make

trait_make 生成一个基特质的专用版本,该版本使用 async fn 和/或 -> impl Trait

例如,如果您想为您的特质创建一个 Send 版本,您将编写

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

trait_make::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_make::make 的文档。

许可证和使用说明

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

依赖项

~290–740KB
~18K SLoC