#async #macro #self #enabled #features #traits #maybe-async

winter-maybe-async

为winterfell提供的同步/异步宏

2 个不稳定版本

0.10.0 2024年6月11日
0.9.0 2024年5月9日

#224过程宏

Download history 169/week @ 2024-05-05 29/week @ 2024-05-12 94/week @ 2024-05-19 233/week @ 2024-05-26 211/week @ 2024-06-02 928/week @ 2024-06-09 1087/week @ 2024-06-16 1090/week @ 2024-06-23 1567/week @ 2024-06-30 938/week @ 2024-07-07 1445/week @ 2024-07-14 1093/week @ 2024-07-21 1594/week @ 2024-07-28

5,120 每月下载次数
用于 9 个crate(3 直接)

MIT 许可证

6KB

Winter maybe-async

此crate包含maybe_async过程属性宏和maybe_await过程宏,用于抽象Rust的同步/异步。

maybe_async

maybe_async宏将根据是否启用了async功能,有条件地向它标记的函数添加async关键字。要生成异步版本,请在crate上启用async功能。如果async功能未开启,将生成同步版本。例如,

// Adding `maybe_async` to trait functions
trait ExampleTrait {
    #[maybe_async]
    fn say_hello(&self);

    #[maybe_async]
    fn get_hello(&self) -> String;
}

// Adding `maybe_async` to regular functions
#[maybe_async]
fn hello_world() {
    // ...
}

async功能启用时,上面的代码将转换为

trait ExampleTrait {
    async fn say_hello(&self);

    async fn get_hello(&self) -> String;
}

async fn hello_world() {
    // ...
}

maybe_await

为了补充maybe_async,我们还有一个maybe_await过程宏,它根据async功能标志有条件地向表达式的末尾添加.await关键字。

#[maybe_async]
fn hello_world() {
    // Adding `maybe_await` to an expression
    let w = maybe_await!(world());

    println!("hello {}", w);
}

#[maybe_async]
fn world() -> String {
    "world".to_string()
}

async功能启用时,上面的代码将转换为

async fn hello_world() {
    let w = world().await;

    println!("hello {}", w);
}

async fn world() -> String {
    "world".to_string()
}

许可证

此项目遵循MIT许可证

依赖关系

~275–720KB
~17K SLoC