pub trait Measurer<V>: Send + Sync {
fn measure(&self, values: &[V]) -> usize;
}
#[derive(Debug, Clone, Copy, Default)]
pub struct CountMeasurer;
impl<V> Measurer<V> for CountMeasurer {
fn measure(&self, values: &[V]) -> usize {
values.len()
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct ByteSizeMeasurer;
impl<V> Measurer<V> for ByteSizeMeasurer
where
V: AsRef<[u8]>,
{
fn measure(&self, values: &[V]) -> usize {
values.iter().map(|value| value.as_ref().len()).sum()
}
}