use super::error::WalError;
pub const MIN_MAX_EVENTS: u64 = 16;
#[derive(Debug, Clone)]
pub struct WriteAheadLogConfig {
pub max_events: u64,
pub capacity_policy: CapacityPolicy,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum CapacityPolicy {
RejectIncoming,
OverwriteOldest,
}
impl Default for CapacityPolicy {
fn default() -> Self {
Self::RejectIncoming
}
}
impl WriteAheadLogConfig {
pub fn validate(&self) -> Result<(), WalError> {
if self.max_events < MIN_MAX_EVENTS {
return Err(WalError::InvalidConfig(format!(
"max_events must be at least {MIN_MAX_EVENTS}, got {}",
self.max_events
)));
}
Ok(())
}
}
impl Default for WriteAheadLogConfig {
fn default() -> Self {
Self {
max_events: 10_000,
capacity_policy: CapacityPolicy::RejectIncoming,
}
}
}
fn default_max_events() -> u64 {
10_000
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize, PartialEq)]
pub struct DurabilityConfig {
#[serde(default)]
pub enabled: bool,
#[serde(default = "default_max_events")]
pub max_events: u64,
#[serde(default)]
pub capacity_policy: CapacityPolicy,
}
impl Default for DurabilityConfig {
fn default() -> Self {
Self {
enabled: false,
max_events: default_max_events(),
capacity_policy: CapacityPolicy::RejectIncoming,
}
}
}
impl DurabilityConfig {
pub fn is_active(&self) -> bool {
self.enabled
}
pub fn to_wal_config(&self) -> WriteAheadLogConfig {
WriteAheadLogConfig {
max_events: self.max_events,
capacity_policy: self.capacity_policy,
}
}
}