use serde::{Deserialize, Deserializer, Serialize};
#[derive(Debug, Clone, Serialize, Default)]
#[serde(rename_all = "snake_case")]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub enum OrderSelectionMethod {
#[default]
Pacf,
PacfAnnual,
}
impl<'de> serde::Deserialize<'de> for OrderSelectionMethod {
fn deserialize<D: Deserializer<'de>>(deserializer: D) -> Result<Self, D::Error> {
let s = String::deserialize(deserializer)?;
match s.as_str() {
"pacf" => Ok(Self::Pacf),
"pacf_annual" => Ok(Self::PacfAnnual),
other => Err(serde::de::Error::unknown_variant(
other,
&["pacf", "pacf_annual"],
)),
}
}
}
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(default, deny_unknown_fields)]
#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
pub struct EstimationConfig {
pub max_order: u32,
pub order_selection: OrderSelectionMethod,
pub min_observations_per_season: u32,
#[serde(default)]
pub max_coefficient_magnitude: Option<f64>,
}
impl Default for EstimationConfig {
fn default() -> Self {
Self {
max_order: 6,
order_selection: OrderSelectionMethod::Pacf,
min_observations_per_season: 30,
max_coefficient_magnitude: None,
}
}
}