Skip to main content

hydro_std/
membership.rs

1use std::hash::Hash;
2
3use hydro_lang::location::{Location, MembershipEvent};
4use hydro_lang::prelude::*;
5use stageleft::q;
6
7pub fn track_membership<'a, K: Hash + Eq, L: Location<'a>>(
8    membership: KeyedStream<K, MembershipEvent, L, Unbounded>,
9) -> KeyedSingleton<K, bool, L, Unbounded> {
10    membership.fold(
11        q!(|| false),
12        q!(|present, event| {
13            match event {
14                MembershipEvent::Joined => *present = true,
15                MembershipEvent::Left => *present = false,
16            }
17        }),
18    )
19}