use std::path::PathBuf;
const FLUSH_INTERVAL_MS: u64 = 500;
#[derive(Debug, Clone)]
pub enum StorageMode {
Memory,
Persistent { data_file: PathBuf },
}
#[derive(Debug, Clone)]
pub struct StorageConfig {
pub mode: StorageMode,
}
impl StorageConfig {
pub fn memory() -> Self {
Self {
mode: StorageMode::Memory,
}
}
pub fn persistent(data_file: PathBuf) -> Self {
Self {
mode: StorageMode::Persistent { data_file },
}
}
pub fn flush_interval_ms(&self) -> u64 {
FLUSH_INTERVAL_MS
}
}
impl Default for StorageConfig {
fn default() -> Self {
Self::memory()
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_is_memory() {
let config = StorageConfig::default();
assert!(matches!(config.mode, StorageMode::Memory));
}
#[test]
fn persistent_stores_path() {
let config = StorageConfig::persistent(PathBuf::from("/tmp/test.json"));
match &config.mode {
StorageMode::Persistent { data_file } => {
assert_eq!(data_file, &PathBuf::from("/tmp/test.json"));
}
_ => panic!("expected Persistent mode"),
}
}
#[test]
fn flush_interval_returns_constant() {
let memory = StorageConfig::memory();
let persistent = StorageConfig::persistent(PathBuf::from("/tmp/test.json"));
assert_eq!(memory.flush_interval_ms(), persistent.flush_interval_ms());
assert_eq!(memory.flush_interval_ms(), 500);
}
}