use crate::core::marketdatahandling::{
discountrequest::DiscountRequest, forwardraterequest::ForwardRateRequest, fxrequest::FxRequest,
spotrequest::SpotRequest,
};
#[derive(Clone, Default)]
pub struct SimulationDataRequest {
discounts: Vec<DiscountRequest>,
forwards: Vec<ForwardRateRequest>,
fx: Vec<FxRequest>,
spots: Vec<SpotRequest>,
requires_numeraire: bool,
}
impl SimulationDataRequest {
#[must_use]
pub const fn new() -> Self {
Self {
discounts: Vec::new(),
forwards: Vec::new(),
fx: Vec::new(),
spots: Vec::new(),
requires_numeraire: false,
}
}
#[must_use]
pub fn with_capacity(discounts: usize, forwards: usize, fx: usize) -> Self {
Self {
discounts: Vec::with_capacity(discounts),
forwards: Vec::with_capacity(forwards),
fx: Vec::with_capacity(fx),
spots: Vec::new(),
requires_numeraire: false,
}
}
pub fn push_df(&mut self, request: DiscountRequest) {
self.discounts.push(request);
}
pub fn push_fwd(&mut self, request: ForwardRateRequest) {
self.forwards.push(request);
}
pub fn push_fx(&mut self, request: FxRequest) {
self.fx.push(request);
}
pub fn push_spot(&mut self, request: SpotRequest) {
self.spots.push(request);
}
#[must_use]
pub fn dfs(&self) -> &[DiscountRequest] {
&self.discounts
}
#[must_use]
pub fn fwds(&self) -> &[ForwardRateRequest] {
&self.forwards
}
#[must_use]
pub fn fxs(&self) -> &[FxRequest] {
&self.fx
}
#[must_use]
pub fn spots(&self) -> &[SpotRequest] {
&self.spots
}
pub const fn require_numeraire(&mut self) {
self.requires_numeraire = true;
}
#[must_use]
pub const fn requires_numeraire(&self) -> bool {
self.requires_numeraire
}
}