Skip to main content

runmat_test/event/
sequence.rs

1use crate::identity::RunId;
2
3use super::{EventSink, TestEvent, TestEventPayload};
4
5pub struct SequencedEventSink<'a, S> {
6    run_id: RunId,
7    next_sequence: u64,
8    sink: &'a mut S,
9}
10
11impl<'a, S: EventSink> SequencedEventSink<'a, S> {
12    pub fn new(run_id: RunId, sink: &'a mut S) -> Self {
13        Self {
14            run_id,
15            next_sequence: 0,
16            sink,
17        }
18    }
19
20    pub fn emit(&mut self, payload: TestEventPayload) {
21        let event = TestEvent {
22            sequence: self.next_sequence,
23            run_id: self.run_id.clone(),
24            payload,
25        };
26        self.next_sequence += 1;
27        self.sink.emit(event);
28    }
29
30    pub fn next_sequence(&self) -> u64 {
31        self.next_sequence
32    }
33}