#emitter #functional-reactive-programming #frp #signal #async

signals

这是一个Rust的函数式反应式库,允许异步链式调用

3个版本

使用旧的Rust 2015

0.0.5 2018年12月18日
0.0.2 2018年10月27日
0.0.1 2018年3月8日

#901 in 异步


协议 中使用

MIT/Apache

13KB
141

Build Status License: MIT License

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-2.0许可协议定义,您有意提交的任何贡献都应双重许可如上所述,不附加任何额外条款或条件。

依赖

~64KB