6个版本
0.10.0 | 2024年4月15日 |
---|---|
0.9.0 | 2024年3月4日 |
0.8.3 | 2022年3月3日 |
0.8.2 | 2022年2月28日 |
0.8.0 | 2022年1月30日 |
#10 在 #async-std
50KB
926 行
原因
应得的赞誉:汉尼拔是优秀的 Xactor 的分支,不幸的是,它的原始维护者最近对其兴趣不大。到目前为止,这里没有破坏性的更改,我们还可以再次合并 xactor 和 hannibal。如果您对此感兴趣,请通过 问题 联系。
文档
功能
- 异步actor。
- 本地上下文中的actor通信。
- 使用Futures进行异步消息处理。
- 类型化消息(无
Any
类型)。允许泛型消息。
示例
use hannibal::*;
#[message(result = String)]
struct ToUppercase(String);
struct MyActor;
impl Actor for MyActor {}
impl Handler<ToUppercase> for MyActor {
async fn handle(&mut self, _ctx: &mut Context<Self>, msg: ToUppercase) -> String {
msg.0.to_uppercase()
}
}
#[hannibal::main]
async fn main() -> Result<()> {
// Start actor and get its address
let mut addr = MyActor.start().await?;
// Send message `ToUppercase` to actor via addr
let res = addr.call(ToUppercase("lowercase".to_string())).await?;
assert_eq!(res, "LOWERCASE");
Ok(())
}
安装
汉尼拔需要在用户空间上使用 async-trait。
安装cargo add后,运行
$ cargo add hannibal
$ cargo add async-trait
我们还提供了tokio运行时,而不是async-std。要使用它,您需要激活 runtime-tokio
并禁用默认功能。
您可以根据以下方式编辑您的 Cargo.toml
hannibal = { version = "x.x.x", features = ["runtime-tokio"], default-features = false }
参考
依赖
~1–15MB
~151K SLoC