5 releases (3 breaking)

0.4.0 Jan 13, 2021
0.3.0 Oct 13, 2020
0.2.1 Aug 30, 2020
0.2.0 Jul 19, 2020
0.1.0 Jul 11, 2020

#928 in Asynchronous

Download history 145/week @ 2024-11-14 132/week @ 2024-11-21 142/week @ 2024-11-28 147/week @ 2024-12-05 152/week @ 2024-12-12 187/week @ 2024-12-19 55/week @ 2024-12-26 97/week @ 2025-01-02 168/week @ 2025-01-09 136/week @ 2025-01-16 149/week @ 2025-01-23 170/week @ 2025-01-30 205/week @ 2025-02-06 200/week @ 2025-02-13 158/week @ 2025-02-20 259/week @ 2025-02-27

882 downloads per month
Used in 3 crates

MIT/Apache

57KB
1K SLoC

act-zero

An actor system for Rust, designed with several goals in mind:

  • No boilerplate.
  • Ergonomic.
  • Supports standard trait-based static and dynamic polymorphism.
  • Embraces async/await.
  • Executor agnostic.

Very little code is required to get started:

use std::error::Error;

use futures::executor::LocalPool;
use act_zero::*;

struct SimpleGreeter {
    number_of_greets: i32,
}

impl Actor for SimpleGreeter {}

impl SimpleGreeter {
    async fn greet(&mut self, name: String) -> ActorResult<String> {
        self.number_of_greets += 1;
        Produces::ok(format!(
            "Hello, {}. You are number {}!",
            name, self.number_of_greets
        ))
    }
}

fn main() -> Result<(), Box<dyn Error>> {
    let mut pool = LocalPool::new();
    let spawner = pool.spawner();
    pool.run_until(async move {
        let actor_ref = Addr::new(
            &spawner,
            SimpleGreeter {
                number_of_greets: 0,
            },
        )?;

        let greeting = call!(actor_ref.greet("John".into())).await?;
        println!("{}", greeting);

        let greeting = call!(actor_ref.greet("Emma".into())).await?;
        println!("{}", greeting);
        Ok(())
    })
}

See the examples folder for more varied uses.

Dependencies

~0.9–12MB
~157K SLoC