laminar_core/streaming/
checkpoint.rs1use std::fmt;
4
5#[derive(Debug, Clone, Default)]
7pub struct StreamCheckpointConfig {
8 pub interval_ms: Option<u64>,
10 pub data_dir: Option<std::path::PathBuf>,
12 pub max_retained: Option<usize>,
14}
15
16#[derive(Debug, Clone, PartialEq, Eq)]
18pub enum CheckpointError {
19 Disabled,
21 DataDirRequired,
23 NoCheckpoint,
25 Timeout,
27 InvalidConfig(String),
29 IoError(String),
31}
32
33impl fmt::Display for CheckpointError {
34 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
35 match self {
36 Self::Disabled => write!(f, "checkpointing is disabled"),
37 Self::DataDirRequired => write!(f, "data directory is required"),
38 Self::NoCheckpoint => write!(f, "no checkpoint available"),
39 Self::Timeout => write!(f, "checkpoint operation timed out"),
40 Self::InvalidConfig(msg) => write!(f, "invalid checkpoint config: {msg}"),
41 Self::IoError(msg) => write!(f, "checkpoint I/O error: {msg}"),
42 }
43 }
44}
45
46impl std::error::Error for CheckpointError {}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn test_default_config() {
54 let config = StreamCheckpointConfig::default();
55 assert!(config.interval_ms.is_none());
56 assert!(config.data_dir.is_none());
57 assert!(config.max_retained.is_none());
58 }
59}