fluxus_runtime/
watermark.rs1use parking_lot::RwLock;
2use std::sync::Arc;
3use std::time::SystemTime;
4
5pub 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}