3个版本
使用旧的Rust 2015
0.0.5 | 2018年12月18日 |
---|---|
0.0.2 | 2018年10月27日 |
0.0.1 | 2018年3月8日 |
#901 in 异步
在 协议 中使用
13KB
141 行
signals
当前版本:0.0.5
Signals crate是一个异步的函数式反应式API。
安装
将以下内容添加到cargo.toml
[dependencies]
signals = "*"
将以下内容添加到您的crate
extern crate signals;
简单示例
use signals::{Signal, Emitter, AmEmitter};
fn main() {
// create a signal that will assert when emitted
let signal = Signal::new_arc_mutex( |x: u32| Ok(x) );
let listener = Signal::new_arc_mutex( |x: u32| { assert_ne!(x, 5); Ok(()) } ); //fail!
// when signal is emitted, listener should execute.
signal.lock().register_listener(&listener);
// emit signal
signal.lock().emit(5);
}
复杂示例
use signals::{Signal, Emitter};
fn main() {
// create a bunch of signals. At the last signal, we should fail.
// If we do not fail, the signals did not work.
let root = Signal::new_arc_mutex( |x: u32| Ok(x.to_string()) ); //convert x to string.
let peek = Signal::new_arc_mutex( |x: String| { println!("Peek: {}", x); Ok(()) } );
let to_i32 = Signal::new_arc_mutex( |x: String| Ok(x.parse::<i32>()?) ); //convert to integer
let inc = Signal::new_arc_mutex( |x: i32| Ok(x+1) ); //increment value
let fail = Signal::new_arc_mutex( |x: i32| { assert_ne!(x, 8); Ok(()) } ); //fail!
//connect all signals together.
root.lock().register_listener(&peek); // snoop on the value! - because we can!
root.lock().register_listener(&to_i32); // parse the string to an integer
to_i32.lock().register_listener(&inc); //increment the value
inc.lock().register_listener(&fail); //then finally fail if the value is 8!
root.lock().emit(7); //7 will increment to 8 and fail!
}
许可证
根据您的选择,许可协议为以下之一:
- Apache License, Version 2.0, (LICENSE-APACHE 或 https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT 或 https://opensource.org/licenses/MIT)
。
贡献
除非您明确表示,否则根据Apache-2.0许可协议定义,您有意提交的任何贡献都应双重许可如上所述,不附加任何额外条款或条件。
依赖
~64KB