use std::fmt;
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
pub enum DateGeneration {
Backward,
Forward,
Zero,
ThirdWednesday,
ThirdWednesdayInclusive,
Twentieth,
TwentiethIMM,
OldCDS,
CDS,
CDS2015,
}
impl fmt::Display for DateGeneration {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let name = match self {
DateGeneration::Backward => "Backward",
DateGeneration::Forward => "Forward",
DateGeneration::Zero => "Zero",
DateGeneration::ThirdWednesday => "ThirdWednesday",
DateGeneration::ThirdWednesdayInclusive => "ThirdWednesdayInclusive",
DateGeneration::Twentieth => "Twentieth",
DateGeneration::TwentiethIMM => "TwentiethIMM",
DateGeneration::OldCDS => "OldCDS",
DateGeneration::CDS => "CDS",
DateGeneration::CDS2015 => "CDS2015",
};
f.write_str(name)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn display_matches_quantlib_labels() {
let cases = [
(DateGeneration::Backward, "Backward"),
(DateGeneration::Forward, "Forward"),
(DateGeneration::Zero, "Zero"),
(DateGeneration::ThirdWednesday, "ThirdWednesday"),
(
DateGeneration::ThirdWednesdayInclusive,
"ThirdWednesdayInclusive",
),
(DateGeneration::Twentieth, "Twentieth"),
(DateGeneration::TwentiethIMM, "TwentiethIMM"),
(DateGeneration::OldCDS, "OldCDS"),
(DateGeneration::CDS, "CDS"),
(DateGeneration::CDS2015, "CDS2015"),
];
for (rule, label) in cases {
assert_eq!(rule.to_string(), label);
}
}
}