5 个版本
0.1.6 | 2023 年 12 月 5 日 |
---|---|
0.1.5 | 2023 年 11 月 3 日 |
0.1.4 | 2023 年 10 月 17 日 |
0.1.3 | 2023 年 8 月 27 日 |
0.1.2 | 2023 年 8 月 16 日 |
#8 在 #actors
27KB
712 行
truba
基于 tokio 运行时环境的 Rust 最小化 actors。
[dependencies]
truba = "0.1"
use truba::{Context, Message, MpscChannel};
struct Value(u32);
impl Message for Value {
type Channel = MpscChannel<Self>;
}
struct MyActor {
value: u32,
}
impl MyActor {
fn run(ctx: Context, value: u32) {
let mut value_in = ctx.receiver::<Value>();
let mut actor = MyActor { value };
truba::spawn_event_loop!(ctx, {
Some(msg) = value_in.recv() => {
actor.handle_value(msg);
},
});
}
fn handle_value(&mut self, Value(value): Value) {
self.value = value;
println!("receive value {value}");
}
}
#[tokio::main]
async fn main() {
let ctx = Context::new();
MyActor::run(ctx.clone(), 42);
let sender = ctx.sender::<Value>();
sender.send(Value(11)).await.ok();
sender.send(Value(22)).await.ok();
ctx.shutdown().await;
}
您可以在 examples 目录中找到更多示例。
依赖
~3–10MB
~89K SLoC