fluxus_runtime/
watermark.rs

1use parking_lot::RwLock;
2use std::sync::Arc;
3use std::time::SystemTime;
4
5/// Watermark tracker for managing event time progress
6pub struct WatermarkTracker {
7    current_watermark: Arc<RwLock<SystemTime>>,
8}
9
10impl Default for WatermarkTracker {
11    fn default() -> Self {
12        Self::new()
13    }
14}
15
16impl WatermarkTracker {
17    pub fn new() -> Self {
18        Self {
19            current_watermark: Arc::new(RwLock::new(SystemTime::now())),
20        }
21    }
22
23    pub fn update(&self, watermark: SystemTime) {
24        let mut current = self.current_watermark.write();
25        if watermark > *current {
26            *current = watermark;
27        }
28    }
29
30    pub fn get_current(&self) -> SystemTime {
31        *self.current_watermark.read()
32    }
33}