Stream joins

join combines multiple streams.

Fair merge

Stream::merge alternates elements from two sources:

#![allow(unused)]
fn main() {
use id_effect::Stream;

let merged = Stream::from_iterable([1, 2]).merge(Stream::from_iterable([10, 20]));
// [1, 10, 2, 20]
}

Combine latest

combine_latest keeps the latest value from each side and emits whenever either updates (after both have emitted at least once):

#![allow(unused)]
fn main() {
use id_effect::{Stream, combine_latest};

let pairs = combine_latest(
    Stream::from_iterable([1, 2]),
    Stream::from_iterable(['a', 'b']),
);
// [(2, 'a'), (2, 'b')]
}

Keyed join

keyed_join performs an inner join on the latest value per key:

#![allow(unused)]
fn main() {
use id_effect::{Stream, keyed_join};

let joined = keyed_join(
    Stream::from_iterable([("user", 1), ("other", 2)]),
    Stream::from_iterable([("user", 'x')]),
);
// [("user", 1, 'x')]
}