14 个不稳定版本 (3 个破坏性版本)
0.4.2 | 2024 年 5 月 17 日 |
---|---|
0.3.3 | 2024 年 3 月 14 日 |
0.3.0 | 2023 年 12 月 28 日 |
0.2.1 | 2023 年 8 月 14 日 |
0.2.0 | 2023 年 7 月 31 日 |
#251 在 并发
每月 89 次下载
59KB
1K SLoC
Actify
注意,这个 crate 正在建设中。虽然已用于生产,但仍在进行直观 API、文档和剩余功能的工作。目前,它不遵循语义版本控制!
Actify 是一个基于 actor 模型 的 Tokio,允许您使用 actify! 宏注解任何您自己的类型的常规实现块。
优点
通过为您生成样板代码,提供了以下关键优势
- 基于 Tokio 和通道的异步 actor 模型,可以保留任意所有者数据类型。
- 通过可克隆的句柄对底层数据的原子访问和修改。
- 方法上的类型化参数和返回值,通过每个句柄公开。
- 无需手动定义消息结构体或枚举!
- 即使不使用宏,也具有泛型方法如 get() 和 set()。
示例
考虑以下示例,其中您希望将您的自定义 Greeter 转换为 actor
use actify::{Handle, actify};
#[derive(Clone, std::fmt::Debug)]
struct Greeter {}
#[actify]
impl Greeter {
fn say_hi(&self, name: String) -> String {
format!("hi {}", name)
}
}
#[tokio::main]
async fn main() {
// An actify handle is created and initialized with the Greeter struct
let handle = Handle::new(Greeter {});
// The say_hi method is made available on its handle through the actify! macro
let greeting = handle.say_hi("Alfred".to_string()).await.unwrap();
// The method is executed remotely on the initialized Greeter and returned through the handle
assert_eq!(greeting, "hi Alfred".to_string())
}
依赖关系
~3–10MB
~91K SLoC