use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::{
quotes::quote::Quote, rates::bootstrapping::curvespec::QuoteSelector, time::date::Date,
};
#[derive(Debug, Serialize, Deserialize)]
pub struct QuoteStore {
reference_date: Date,
quotes: HashMap<String, Quote>,
}
impl QuoteStore {
#[must_use]
pub fn new(reference_date: Date) -> Self {
Self {
reference_date,
quotes: HashMap::new(),
}
}
#[must_use]
pub const fn reference_date(&self) -> Date {
self.reference_date
}
pub fn add_quote(&mut self, quote: Quote) {
let id = quote.details().identifier();
self.quotes.insert(id, quote);
}
#[must_use]
pub fn quote(&self, identifier: &str) -> Option<&Quote> {
self.quotes.get(identifier)
}
#[must_use]
pub const fn quotes(&self) -> &HashMap<String, Quote> {
&self.quotes
}
}
impl QuoteSelector for QuoteStore {
fn select(&self, identifier: &str) -> Option<Quote> {
self.quotes.get(identifier).cloned()
}
fn reference_date(&self) -> Date {
self.reference_date
}
}