use std::fmt::Display;
use crate::{is_feb29_between_exc_inc, DayCounter};
#[allow(clippy::module_name_repetitions)]
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq)]
pub struct Actual365Fixed;
impl DayCounter for Actual365Fixed {
fn day_count_fraction(&self, start: &chrono::NaiveDate, end: &chrono::NaiveDate) -> f64 {
(*end - *start).num_days() as f64 / 365.0
}
}
impl Display for Actual365Fixed {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Actual/365 (Fixed)")
}
}
#[allow(clippy::module_name_repetitions)]
#[derive(Debug, Copy, Clone, Default, PartialEq, Eq)]
pub struct Actual365A;
impl DayCounter for Actual365A {
fn day_count_fraction(&self, start: &chrono::NaiveDate, end: &chrono::NaiveDate) -> f64 {
let denominator = if is_feb29_between_exc_inc(*start, *end) {
366
} else {
365
};
(*end - *start).num_days() as f64 / f64::from(denominator)
}
}
impl Display for Actual365A {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "Actual/365 (A)")
}
}