Skip to main content

laminar_core/streaming/
checkpoint.rs

1//! Streaming checkpoint configuration.
2
3use std::fmt;
4
5/// Configuration for streaming checkpoints.
6#[derive(Debug, Clone, Default)]
7pub struct StreamCheckpointConfig {
8    /// Checkpoint interval in milliseconds. `None` = manual only.
9    pub interval_ms: Option<u64>,
10    /// Directory for persisting checkpoints. `None` = in-memory only.
11    pub data_dir: Option<std::path::PathBuf>,
12    /// Maximum number of retained checkpoints. `None` = default (3).
13    pub max_retained: Option<usize>,
14}
15
16/// Errors from checkpoint operations.
17#[derive(Debug, Clone, PartialEq, Eq)]
18pub enum CheckpointError {
19    /// Checkpointing is disabled.
20    Disabled,
21    /// A data directory is required.
22    DataDirRequired,
23    /// No checkpoint available for restore.
24    NoCheckpoint,
25    /// Operation timed out.
26    Timeout,
27    /// Invalid configuration.
28    InvalidConfig(String),
29    /// I/O error (stored as string for Clone/PartialEq).
30    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}