2 releases
0.9.9 | May 30, 2022 |
---|---|
0.9.0 | May 12, 2022 |
#69 in #actors
Used in xtor
6KB
82 lines
Xtor: An handler async actor framework.
Key features
- small: very small codebase
- async: allow you to write async code in your actor
- full featured: we have built-in types such as
Supervisor
Broker
Caller
and so on - both dynamic and fast: typed message and weak typed event.
usage
add xtor
to your library
cargo add xtor
write some code
use anyhow::Result;
use async_trait::async_trait;
use xtor::actor::{context::Context, message::Handler, runner::Actor};
// first define actor
struct HelloActor;
impl Actor for HelloActor {}
// then define message
#[xtor::message(result = "()")]
#[derive(Debug)]
struct Hello;
// then impl the handler
#[async_trait]
impl Handler<Hello> for HelloActor {
async fn handle(&self, _ctx: &Context, msg: Hello) -> Result<()> {
println!("{:?} received", &msg);
Ok(())
}
}
// main will finish when all actors died out.
#[xtor::main]
async fn main() -> Result<()> {
let hello_actor = HelloActor;
let hello_actor_address = hello_actor.spawn().await?;
hello_actor_address.call::<HelloActor, Hello>(Hello).await
}
project structure
src/actor/*
for pure async actor implementationsrc/utils/*
for utilities both trait and default implementation such asDefaultBroker
DefaultSupervisor
Service
References
Dependencies
~1.5MB
~36K SLoC