use core::num::NonZeroUsize;
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Copy, Default, Clone, Debug)]
pub enum RetentionPolicy {
#[default]
Drop,
Keep,
KeepWithLimit(usize),
}
impl RetentionPolicy {
pub fn should_drop(&self) -> bool {
matches!(self, RetentionPolicy::Drop)
}
pub fn should_keep(&self) -> bool {
matches!(
self,
RetentionPolicy::Keep | RetentionPolicy::KeepWithLimit { .. }
)
}
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Copy, Default, Clone, Debug)]
pub enum CompressionPolicy {
#[default]
Never,
Always,
After(usize),
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Copy, Clone, Default, Debug)]
pub enum DataLayout {
#[default]
Normal,
Compressed(usize),
Prefix,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Copy, Clone, Default, Debug, PartialEq)]
pub enum WheelMode {
#[default]
Stream,
Index,
}
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
#[derive(Copy, Clone, Debug)]
pub struct WheelConf {
pub capacity: NonZeroUsize,
pub watermark: u64,
pub data_layout: DataLayout,
pub tick_size_ms: u64,
pub retention: RetentionPolicy,
pub mode: WheelMode,
}
impl WheelConf {
pub fn new(tick_size_ms: u64, capacity: NonZeroUsize) -> Self {
Self {
capacity,
watermark: Default::default(),
data_layout: Default::default(),
tick_size_ms,
retention: Default::default(),
mode: Default::default(),
}
}
pub fn with_watermark(mut self, watermark: u64) -> Self {
self.watermark = watermark;
self
}
pub fn with_data_layout(mut self, layout: DataLayout) -> Self {
self.data_layout = layout;
self
}
pub fn with_mode(mut self, mode: WheelMode) -> Self {
self.mode = mode;
self
}
pub fn with_retention_policy(mut self, policy: RetentionPolicy) -> Self {
self.retention = policy;
self
}
pub fn set_watermark(&mut self, watermark: u64) {
self.watermark = watermark;
}
pub fn set_data_layout(&mut self, layout: DataLayout) {
self.data_layout = layout;
}
pub fn set_mode(&mut self, mode: WheelMode) {
self.mode = mode;
}
pub fn set_retention_policy(&mut self, policy: RetentionPolicy) {
self.retention = policy;
}
}