[][src]Macro frappe::signal_lift

macro_rules! signal_lift {
    ($sig:expr => $f:expr) => { ... };
    ($($sig:expr),+ => | $($args:pat),+ | $body:expr) => { ... };
    ($($sig:expr),+ => $f:expr) => { ... };
    (@closure $body:expr ; $($args:pat)* , $($vars:ident)* ;) => { ... };
    (@closure $body:expr ; $($args:pat)* , $($vars:ident)* ; $sig:expr $(,$stail:expr)*) => { ... };
    (@expr $f:expr ; $($vars:ident)* ;) => { ... };
    (@expr $f:expr ; $($vars:ident)* ; $sig:expr $(,$stail:expr)*) => { ... };
}

Maps a function over the value of signals.

This converts a function Fn(A, B, ...) -> R and the signals Signal<A>, Signal<B>, ... into a Signal<R> that computes it's value by sampling the input signals and then calling the supplied function.

Example

use frappe::{Sink, Signal, signal_lift};

let sink = Sink::new();
let sig1 = Signal::from_fn(|| 3);
let sig2 = sig1.map(|x| x + 24);

let lifted = signal_lift!(sig1, sig2, sink.stream().hold(0) => |a, b, c| a + b + c);

sink.send(12);
assert_eq!(lifted.sample(), 42);