use crate::metrics::{Number, Result};
use std::time::SystemTime;
pub trait Sum {
fn sum(&self) -> Result<Number>;
}
pub trait Count {
fn count(&self) -> Result<u64>;
}
pub trait Min {
fn min(&self) -> Result<Number>;
}
pub trait Max {
fn max(&self) -> Result<Number>;
}
pub trait LastValue {
fn last_value(&self) -> Result<(Number, SystemTime)>;
}
pub trait Points {
fn points(&self) -> Result<Vec<Number>>;
}
#[derive(Debug)]
pub struct Buckets {
boundaries: Vec<f64>,
counts: Vec<f64>,
}
impl Buckets {
pub fn new(boundaries: Vec<f64>, counts: Vec<f64>) -> Self {
Buckets { boundaries, counts }
}
pub fn boundaries(&self) -> &Vec<f64> {
&self.boundaries
}
pub fn counts(&self) -> &Vec<f64> {
&self.counts
}
}
pub trait Histogram: Sum + Count {
fn histogram(&self) -> Result<Buckets>;
}
pub trait MinMaxSumCount: Min + Max + Sum + Count {}