Skip to main content

hydro_test/tutorials/
single_client_counter_buggy.rs

1use hydro_lang::prelude::*;
2
3pub struct CounterServer;
4
5pub fn single_client_counter_service_buggy<'a>(
6    increment_requests: Stream<(), Process<'a, CounterServer>>,
7    get_requests: Stream<(), Process<'a, CounterServer>>,
8) -> (
9    Stream<(), Process<'a, CounterServer>>, // increment acknowledgments
10    Stream<usize, Process<'a, CounterServer>>, // get responses
11) {
12    let current_count = increment_requests.clone().count();
13    let increment_ack = increment_requests;
14
15    let get_response = sliced! {
16        let request_batch = use(get_requests, nondet!(/** we never observe batch boundaries */));
17        let count_snapshot = use(current_count, nondet!(/** intentional, based on when the request came in */));
18
19        request_batch.cross_singleton(count_snapshot).map(q!(|(_, count)| count))
20    };
21
22    (increment_ack, get_response)
23}