pub trait MemoryEstimator: Send + Sync {
fn estimate_bytes(&self, items_buffered: usize) -> usize;
fn name(&self) -> &'static str;
}
#[derive(Debug, Clone)]
pub struct ConservativeEstimator;
impl MemoryEstimator for ConservativeEstimator {
fn estimate_bytes(&self, items_buffered: usize) -> usize {
items_buffered * 2048 }
fn name(&self) -> &'static str {
"conservative_2kb"
}
}
#[derive(Debug, Clone)]
pub struct FixedEstimator {
bytes_per_item: usize,
}
impl FixedEstimator {
#[must_use]
pub const fn new(bytes_per_item: usize) -> Self {
Self { bytes_per_item }
}
}
impl MemoryEstimator for FixedEstimator {
fn estimate_bytes(&self, items_buffered: usize) -> usize {
items_buffered.saturating_mul(self.bytes_per_item)
}
fn name(&self) -> &'static str {
"fixed_custom"
}
}
#[cfg(test)]
mod tests;