Crates.io | hannibal |
lib.rs | hannibal |
version | 0.10.0 |
source | src |
created_at | 2022-01-30 23:44:46.44691 |
updated_at | 2024-04-15 15:42:49.718261 |
description | a small actor library |
homepage | https://github.com/hoodie/hannibal |
repository | https://github.com/hoodie/hannibal |
max_upload_size | |
id | 524247 |
size | 103,093 |
Credit where credit is due: Hannibal is a fork of the excellent Xactor which unfortunately received very little interest by its original maintainer recently. As of now there is no breaking change here, we could still merge xactor and hannibal again. Please reach out via an issue if you are interested.
Any
type). Generic messages are allowed.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(())
}
Hannibal requires async-trait on userland.
With cargo add installed, run:
$ cargo add hannibal
$ cargo add async-trait
We also provide the tokio runtime instead of async-std. To use it, you need to activate runtime-tokio
and disable default features.
You can edit your Cargo.toml
as follows:
hannibal = { version = "x.x.x", features = ["runtime-tokio"], default-features = false }