9个版本
0.1.8 | 2021年4月6日 |
---|---|
0.1.7 | 2021年4月6日 |
0.1.5 | 2021年3月18日 |
0.1.2 | 2020年9月17日 |
#983 在 并发
每月下载量 27次
37KB
950 行
Theatre
简洁的异步actor模型实现
查看 examples
文件夹以了解Theatre的工作方式。
累加器示例
use theatre::prelude::*;
#[derive(Default)]
struct Accumulator {
count: i32,
}
impl Actor for Accumulator {}
struct Increment;
impl Message for Increment {
type Return = ();
}
struct GetCount;
impl Message for GetCount {
type Return = i32;
}
#[async_trait]
impl Handler<Increment> for Accumulator {
async fn handle(
&mut self,
_msg: Increment,
_context: &mut Context<Self>,
) -> <Increment as Message>::Return {
println!("Adding 1");
self.count += 1
}
}
#[async_trait]
impl Handler<GetCount> for Accumulator {
async fn handle(
&mut self,
_msg: GetCount,
_context: &mut Context<Self>,
) -> <GetCount as Message>::Return {
self.count
}
}
#[tokio::main]
async fn main() {
let mut acc = Accumulator::default().start().await.0;
assert_eq!(0, acc.send(GetCount).await.unwrap());
acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();
acc.send(Increment).await.unwrap();
println!("Value: {}", acc.send(GetCount).await.unwrap());
assert_eq!(4, acc.send(GetCount).await.unwrap());
}
依赖
~3–11MB
~90K SLoC