use serde::{Deserialize, Serialize};
use crate::{indices::marketindex::MarketIndex, volatility::volatilityindexing::Strike};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum CalibrationSource {
Surface {
market_index: MarketIndex,
},
Cube {
market_index: MarketIndex,
},
}
#[derive(Clone, Debug, Serialize, Deserialize)]
pub struct ModelCalibrationConfiguration {
source: CalibrationSource,
quote_ids: Vec<String>,
#[serde(default)]
strike: Option<Strike>,
alpha: f64,
}
impl ModelCalibrationConfiguration {
#[must_use]
pub const fn new(source: CalibrationSource, quote_ids: Vec<String>, alpha: f64) -> Self {
Self {
source,
quote_ids,
strike: None,
alpha,
}
}
#[must_use]
pub const fn with_strike(mut self, strike: Strike) -> Self {
self.strike = Some(strike);
self
}
#[must_use]
pub const fn source(&self) -> &CalibrationSource {
&self.source
}
#[must_use]
pub fn quote_ids(&self) -> &[String] {
&self.quote_ids
}
#[must_use]
pub const fn strike(&self) -> Option<Strike> {
self.strike
}
#[must_use]
pub const fn alpha(&self) -> f64 {
self.alpha
}
}