1use chrono::NaiveDate;
2use crate::rates::utils::DayCountConvention;
3use crate::rates::utils::TermStructure;
4pub trait Instrument{
5 fn npv(&self)-> f64;
6}
7
8pub trait Greeks{
9 fn delta(&self) -> f64;
10 fn gamma(&self) -> f64;
11 fn vega(&self) -> f64;
12 fn theta(&self) -> f64;
13 fn rho(&self) -> f64;
14}
15
16
17pub trait Rates {
18 fn get_implied_rates(&self) -> f64;
19 fn get_maturity_date(&self) -> NaiveDate;
20 fn get_rate(&self) -> f64;
21 fn get_maturity_discount_factor(&self) -> f64;
22 fn get_day_count(&self) -> &DayCountConvention;
23 fn set_term_structure(&mut self,term_structure:TermStructure)->();
24}
25
26pub trait Observer{
27 fn update(&mut self);
28 fn reset(&mut self);
29}
30pub trait Observable{
31 fn update(&mut self);
32 fn reset(&mut self);
33}