Crates.io | act-zero-macro |
lib.rs | act-zero-macro |
version | 0.2.1 |
source | src |
created_at | 2020-07-11 21:59:05.975464 |
updated_at | 2020-08-30 00:44:47.146984 |
description | Procedural macros for act-zero |
homepage | |
repository | https://github.com/Diggsey/act-zero |
max_upload_size | |
id | 264204 |
size | 53,507 |
An actor system for Rust, designed with several goals in mind:
There are also some basic building blocks to support remoting, but the actual mechanism to transfer messages is left to the user.
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 {
type Error = ();
}
#[act_zero]
trait Greeter {
fn greet(&self, name: String, res: Sender<String>);
}
#[act_zero]
impl Greeter for SimpleGreeter {
async fn greet(&mut self, name: String, res: Sender<String>) {
self.number_of_greets += 1;
res.send(format!(
"Hello, {}. You are number {}!",
name, self.number_of_greets
))
.ok();
}
}
fn main() -> Result<(), Box<dyn Error>> {
let mut pool = LocalPool::new();
let spawner = pool.spawner();
pool.run_until(async move {
let actor_ref = spawn(
&spawner,
SimpleGreeter {
number_of_greets: 0,
},
)?;
let greeting = actor_ref.call_greet("John".into()).await?;
println!("{}", greeting);
let greeting = actor_ref.call_greet("Emma".into()).await?;
println!("{}", greeting);
Ok(())
})
}