3个版本 (1个不稳定)
1.1.0-alpha | 2020年5月10日 |
---|---|
1.0.0-alpha | 2020年5月3日 |
0.1.0 | 2019年6月26日 |
#1312 in 异步
30KB
787 代码行数
Bottle
文档 | crate信息 | 仓库 |
Rust的actor模型实现。
基本用法
#![feature(arbitrary_self_types)]
use bottle::{Output, Receiver, Remote, Handler, EventQueue};
pub struct Foo {
//
}
pub enum Event {
Ping(Remote<Foo>),
Pong
}
impl bottle::Event for Event {
type Response = ();
}
impl Handler<Event> for Foo {
fn handle(self: Receiver<Self>, event: Event) -> Output<()> {
match event {
Event::Ping(remote) => async move {
println!("ping");
remote.send(Event::Pong).await
}.into(),
Event::Pong => {
println!("pong");
Output::Now(())
}
}
}
}
#[async_std::main]
async fn main() {
let queue = EventQueue::new();
let a = Remote::new(queue.reference(), Foo { });
let b = Remote::new(queue.reference(), Foo { });
std::thread::spawn(move || {
async_std::task::block_on(queue.process())
});
a.send(Event::Ping(b)).await;
}
许可证
在以下许可证中选择一种:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确表示,否则任何有意提交以包含在作品中并由你定义的Apache-2.0许可证所涵盖的贡献,将按照上述方式双许可,不附加任何额外条款或条件。
依赖项
~1.4–2MB
~32K SLoC