#async-version #sync #macro #await #function #suffix #once

过程宏 syncify

一个简单的宏,用于一次性编写异步函数,并获取异步版本和同步版本,同步版本将删除所有异步函数修饰符和所有 .await 后缀。

1 个不稳定版本

0.1.0 2024年7月30日

#1074过程宏

Download history 125/week @ 2024-07-27 25/week @ 2024-08-03 360/week @ 2024-08-10

每月510次下载
用于 3 crate

MIT/Apache

7KB
52 代码行

Syncify

物超所值:一个用于编写异步函数的简单Rust宏,一次性编写后,既可以获取异步版本,也可以获取同步版本,同步版本会删除所有 async 函数修饰符和所有 .await 后缀。

状态:它工作正常,但这个crate并不打算作为一个高质量的通用crate。宏的错误消息不好,功能也很基础。但它确实是我们需要的,这就足够了。

用法

mod 项上放置 #[syncify(name_of_sync_mod_variant)]。在该 mod 内部,将所有应与同步版本不同的 use 项使用 #[syncify_replace(<alternate-use-item>)] 注释。

示例

use syncify::syncify;
use syncify::syncify_replace;

#[syncify(greet_sync)]
mod greet {
    #[syncify_replace(use crate::speaking_sync::speak;)] // A sync function for speaking.
    use crate::speaking::speak; // An async function for speaking.

    pub async fn do_greet(name: &str) -> usize {
        speak(name).await;
        return name.len();
    }
}

展开为

use syncify::syncify;
use syncify::syncify_replace;

mod greet {
    use crate::speaking::speak; // An async function for speaking.

    pub async fn do_greet(name: &str) -> usize {
        speak(name).await;
        return name.len();
    }
}

mod greet_sync {
    use crate::speaking_sync::speak; // A sync function for speaking.

    pub fn do_greet(name: &str) -> usize {
        speak(name);
        return name.len();
    }
}

依赖关系

~260–710KB
~17K SLoC