use std::path::PathBuf;
use crate::checkpoint::CheckpointConfig;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum WalCommit {
Enqueue,
Write,
Sync,
}
#[derive(Debug, Clone)]
#[non_exhaustive]
pub enum Storage {
File {
dir: PathBuf,
},
Memory,
}
#[derive(Debug, Clone)]
pub struct TreeConfig {
pub storage: Storage,
pub buffer_pool_size: usize,
pub wal_commit: WalCommit,
pub memory_flush_on_write: bool,
pub checkpoint: CheckpointConfig,
}
impl TreeConfig {
#[must_use]
pub fn new<P: Into<PathBuf>>(dir: P) -> Self {
Self {
storage: Storage::File { dir: dir.into() },
buffer_pool_size: 64,
wal_commit: WalCommit::Enqueue,
memory_flush_on_write: true,
checkpoint: CheckpointConfig::default(),
}
}
#[must_use]
pub fn memory() -> Self {
Self {
storage: Storage::Memory,
buffer_pool_size: 64,
wal_commit: WalCommit::Enqueue,
memory_flush_on_write: true,
checkpoint: CheckpointConfig::default(),
}
}
#[must_use]
pub fn is_memory(&self) -> bool {
matches!(self.storage, Storage::Memory)
}
#[must_use]
pub fn wal_path(&self) -> Option<PathBuf> {
match &self.storage {
Storage::File { dir } => Some(dir.join("journal.wal")),
Storage::Memory => None,
}
}
}