use chrono::NaiveDateTime;
use core::str::FromStr;
use serde::Deserialize;
#[cfg(feature = "utoipa")]
use utoipa::{IntoParams, ToSchema};
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq)]
#[cfg_attr(feature = "utoipa", derive(ToSchema))]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum MeasurementType {
Times,
Connections,
Memory,
}
impl FromStr for MeasurementType {
type Err = ();
fn from_str(s: &str) -> Result<Self, Self::Err> {
match s.to_lowercase().as_str() {
"times" => Ok(Self::Times),
"connections" => Ok(Self::Connections),
"memory" => Ok(Self::Memory),
_ => Err(()),
}
}
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq)]
#[cfg_attr(feature = "utoipa", derive(IntoParams))]
#[non_exhaustive]
pub struct GetStatsHistoryParams {
pub buffer: Option<MeasurementType>,
pub from: Option<NaiveDateTime>,
pub limit: Option<usize>,
}
#[derive(Clone, Copy, Debug, Default, Deserialize, Eq, PartialEq)]
#[cfg_attr(feature = "utoipa", derive(IntoParams))]
#[non_exhaustive]
pub struct GetStatsFeedParams {
pub r#type: Option<MeasurementType>,
}