1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
// use std::collections::HashMap;
// use crate::{
// rates::{
// enums::Compounding,
// traits::{HasReferenceDate, YieldProvider, YieldProviderError},
// yieldtermstructure::traits::YieldTermStructureTrait,
// },
// time::{date::Date, enums::Frequency, period::Period},
// };
// use super::{iborindex::IborIndex, overnightindex::OvernightIndex, traits::FixingProvider};
// /// # InterestRateIndex
// /// Enum that defines an interest rate index.
// #[derive(Clone)]
// pub enum InterestRateIndex {
// IborIndex(IborIndex),
// OvernightIndex(OvernightIndex),
// }
// impl FixingProvider for InterestRateIndex {
// fn fixing(&self, date: Date) -> Option<f64> {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.fixing(date),
// InterestRateIndex::OvernightIndex(overnight_index) => overnight_index.fixing(date),
// }
// }
// fn add_fixing(&mut self, date: Date, rate: f64) {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.add_fixing(date, rate),
// InterestRateIndex::OvernightIndex(overnight_index) => {
// overnight_index.add_fixing(date, rate)
// }
// }
// }
// fn fixings(&self) -> &HashMap<Date, f64> {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.fixings(),
// InterestRateIndex::OvernightIndex(overnight_index) => overnight_index.fixings(),
// }
// }
// }
// impl HasReferenceDate for InterestRateIndex {
// fn reference_date(&self) -> Date {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.reference_date(),
// InterestRateIndex::OvernightIndex(overnight_index) => overnight_index.reference_date(),
// }
// }
// }
// impl YieldProvider for InterestRateIndex {
// fn discount_factor(&self, date: Date) -> Result<f64, YieldProviderError> {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.discount_factor(date),
// InterestRateIndex::OvernightIndex(overnight_index) => {
// overnight_index.discount_factor(date)
// }
// }
// }
// fn forward_rate(
// &self,
// start_date: Date,
// end_date: Date,
// compounding: Compounding,
// frequency: Frequency,
// ) -> Result<f64, YieldProviderError> {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => {
// ibor_index.forward_rate(start_date, end_date, compounding, frequency)
// }
// InterestRateIndex::OvernightIndex(overnight_index) => {
// overnight_index.forward_rate(start_date, end_date, compounding, frequency)
// }
// }
// }
// }
// impl InterestRateIndex {
// pub fn term_structure(&self) -> Option<&dyn YieldTermStructureTrait> {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.term_structure(),
// InterestRateIndex::OvernightIndex(overnight_index) => overnight_index.term_structure(),
// }
// }
// pub fn tenor(&self) -> Period {
// match self {
// InterestRateIndex::IborIndex(ibor_index) => ibor_index.tenor(),
// InterestRateIndex::OvernightIndex(overnight_index) => overnight_index.tenor(),
// }
// }
// }