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}