use serde::{Deserialize, Serialize};
use crate::common::CommitVersion;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum RetentionPolicy {
KeepForever,
KeepVersions {
count: u64,
cleanup_mode: CleanupMode,
},
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum CleanupMode {
Delete,
Drop,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum CleanupAction {
Delete,
Drop,
Keep,
}
impl Default for RetentionPolicy {
fn default() -> Self {
RetentionPolicy::KeepForever
}
}
impl RetentionPolicy {
pub fn should_retain(
&self,
_version: CommitVersion,
_current_version: CommitVersion,
version_count: u64,
) -> bool {
match self {
RetentionPolicy::KeepForever => true,
RetentionPolicy::KeepVersions {
count,
..
} => {
version_count <= *count
}
}
}
pub fn cleanup_mode(&self) -> Option<CleanupMode> {
match self {
RetentionPolicy::KeepForever => None,
RetentionPolicy::KeepVersions {
cleanup_mode,
..
} => Some(*cleanup_mode),
}
}
}