use serde::{Deserialize, Serialize};
pub const DEFAULT_COMPRESSION: u32 = 100;
pub const MIN_COMPRESSION: u32 = 1;
pub const MAX_COMPRESSION: u32 = 1000;
pub const MIN_CAPACITY: usize = 64;
pub const MAX_CAPACITY: usize = 1024;
#[inline]
pub const fn calculate_capacity(compression: u32) -> usize {
let cap = compression as usize * 6 + 10;
if cap > MAX_CAPACITY {
MAX_CAPACITY
} else {
cap
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct TDigestCreate {
pub compression: u32,
}
impl Default for TDigestCreate {
#[inline]
fn default() -> Self {
Self {
compression: DEFAULT_COMPRESSION,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)]
pub struct TDigestMerge {
pub compression: Option<u32>,
pub override_dest: bool,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct TDigestInfo {
pub compression: u32,
pub capacity: usize,
pub merged_nodes: usize,
pub unmerged_nodes: usize,
pub merged_weight: f64,
pub unmerged_weight: f64,
pub total_weight: f64,
pub observations: u64,
pub total_compressions: u64,
pub minimum: Option<f64>,
pub maximum: Option<f64>,
}