#bus #tokio #future #lazy-evaluation #sink #stream #ok

tokio-bus

带有tokio支持的消息总线

3个版本

0.1.2 2019年9月5日
0.1.1 2019年1月18日
0.1.0 2019年1月15日

#35 in #ok

MIT 许可证

15KB
203

tokio-bus

crates.io badge docs.rs badge travis-ci.org badge

集成,让您可以使用 bustokio

示例

use tokio;
use tokio_bus::Bus;
use futures::future::{Future, lazy, ok};
use futures::stream::{Stream, iter_ok};
use futures::sink::Sink;

let mut bus = Bus::new(64);
let rx1 = bus.add_rx();
let rx2 = bus.add_rx();

let send_values = bus
    .send_all(iter_ok::<_, ()>(vec![1, 2, 3, 4, 5, 6]));

let sum_values = rx1
    .fold(0i32, |acc, x| { ok(acc + x) });

let div_values = rx2
    .fold(1f64, |acc, x| { ok(x as f64 / acc) });

let runtime = tokio::runtime::Runtime::new().unwrap();
runtime.block_on_all(lazy(move || {
    tokio::spawn(send_values
        .map(|_| {})
        .map_err(|_| { panic!(); })
    );
    assert_eq!(sum_values.wait(), Ok(21));
    assert_eq!(div_values.wait(), Ok(3.2));
    ok::<(), ()>(())
})).unwrap();

依赖关系

~3.5–8.5MB
~57K SLoC