xtor

Crates.ioxtor
lib.rsxtor
version0.9.10
sourcesrc
created_at2022-05-12 20:56:07.142381
updated_at2022-05-30 07:36:47.305474
descriptionAsync Actor framework for Rust which is blazing fast and rock solid.
homepagehttps://github.com/starcoinorg/xtor
repository
max_upload_size
id585476
size110,935
LemonHX.eth (LemonHX)

documentation

https://docs.rs/xtor/

README

Xtor: An handler async actor framework.

CI Crates

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 implementation
  • src/utils/* for utilities both trait and default implementation such as
    • DefaultBroker
    • DefaultSupervisor
    • Service

References

Commit count: 0

cargo fmt