use std::fmt;
#[derive(Debug, Clone, Default)]
pub struct StreamCheckpointConfig {
pub interval_ms: Option<u64>,
pub data_dir: Option<std::path::PathBuf>,
pub max_retained: Option<usize>,
pub alignment_timeout_ms: Option<u64>,
pub max_in_flight_epochs: Option<u64>,
pub max_staged_bytes: Option<u64>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum CheckpointError {
Disabled,
DataDirRequired,
NoCheckpoint,
Timeout,
InvalidConfig(String),
IoError(String),
}
impl fmt::Display for CheckpointError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Disabled => write!(f, "checkpointing is disabled"),
Self::DataDirRequired => write!(f, "data directory is required"),
Self::NoCheckpoint => write!(f, "no checkpoint available"),
Self::Timeout => write!(f, "checkpoint operation timed out"),
Self::InvalidConfig(msg) => write!(f, "invalid checkpoint config: {msg}"),
Self::IoError(msg) => write!(f, "checkpoint I/O error: {msg}"),
}
}
}
impl std::error::Error for CheckpointError {}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_default_config() {
let config = StreamCheckpointConfig::default();
assert!(config.interval_ms.is_none());
assert!(config.data_dir.is_none());
assert!(config.max_retained.is_none());
assert!(config.alignment_timeout_ms.is_none());
}
}