runmat_test/event/
sequence.rs1use 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}