hydro_std 0.16.0

Standard library of distributed systems building blocks for Hydro
Documentation
use std::hash::Hash;

use hydro_lang::location::{Location, MembershipEvent};
use hydro_lang::prelude::*;
use stageleft::q;

pub fn track_membership<'a, K: Hash + Eq, L: Location<'a>>(
    membership: KeyedStream<K, MembershipEvent, L, Unbounded>,
) -> KeyedSingleton<K, bool, L, Unbounded> {
    membership.fold(
        q!(|| false),
        q!(|present, event| {
            match event {
                MembershipEvent::Joined => *present = true,
                MembershipEvent::Left => *present = false,
            }
        }),
    )
}