3个版本 (1个不稳定)

1.1.0-alpha2020年5月10日
1.0.0-alpha2020年5月3日
0.1.0 2019年6月26日

#1312 in 异步

MIT/Apache

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-2.0许可证所涵盖的贡献,将按照上述方式双许可,不附加任何额外条款或条件。

依赖项

~1.4–2MB
~32K SLoC