#匿名 #闭包

anonymous-trait

使用捕获环境实现的匿名特质

4 个版本

0.1.3 2024 年 1 月 10 日
0.1.2 2024 年 1 月 10 日
0.1.1 2024 年 1 月 10 日
0.1.0 2023 年 12 月 21 日

1084Rust 模式

每月下载 42

MIT/Apache

35KB
974 代码行

anonymous-trait

使用捕获环境实现的匿名特质

示例

trait Cat {
    fn meow(&self) -> String;
    fn set_name(&mut self, new: String);
    async fn meow_async(&self) -> String;
}

#[tokio::main]
async fn main() {
    let name = "mock";

    #[anonymous_trait::anonymous_trait(let mut cat_mock = "default".into())]
    impl Cat for String {
        fn meow(&self) -> String {
            name.to_string()
        }

        fn set_name(&mut self, new: String) {
            *self = new;
        }

        async fn meow_async(&self) -> String {
            "meow".to_string()
        }
    }

    run(&mut cat_mock).await;
}

async fn run(cat: &mut impl Cat) {
    println!("meow: {}, expected: mock", cat.meow());
    cat.set_name("hi".to_string());
    println!("meow_async: {}, expected: meow", cat.meow_async().await);
}

依赖

~255–700KB
~17K SLoC