hannibal

Crates.iohannibal
lib.rshannibal
version0.10.0
sourcesrc
created_at2022-01-30 23:44:46.44691
updated_at2024-04-15 15:42:49.718261
descriptiona small actor library
homepagehttps://github.com/hoodie/hannibal
repositoryhttps://github.com/hoodie/hannibal
max_upload_size
id524247
size103,093
Hendrik Sollich (hoodie)

documentation

https://docs.rs/hannibal/

README

Hannibal

build version downloads docs.rs docs contributors maintenance license

a small actor library

Why

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.

Documentation

Features

  • Async actors.
  • Actor communication in a local context.
  • Using Futures for asynchronous message handling.
  • Typed messages (No Any type). Generic messages are allowed.

Examples

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(())
}

Installation

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 }

References

Commit count: 179

cargo fmt