use time::Date;
#[derive(Debug, Clone, Copy)]
pub enum TypeFlag {
Call = 1,
Put = -1,
}
#[derive(Debug, Clone)]
pub enum ExerciseFlag {
European {
expiry: Date,
},
American {
start: Date,
end: Date,
},
Bermudan {
exercise_dates: Vec<Date>,
},
}
impl ExerciseFlag {
pub fn expiry(&self) -> Date {
match self {
ExerciseFlag::European { expiry } => *expiry,
ExerciseFlag::American { end, .. } => *end,
ExerciseFlag::Bermudan { exercise_dates } => exercise_dates[exercise_dates.len() - 1],
}
}
}
#[derive(Debug, Clone, Copy)]
pub enum StrikeFlag {
Fixed,
Floating,
}
#[derive(Debug, Clone, Copy)]
pub enum SettlementFlag {
Cash,
Physical,
}
#[derive(Debug, Clone, Copy)]
pub enum AveragingMethod {
ArithmeticDiscrete,
ArithmeticContinuous,
GeometricDiscrete,
GeometricContinuous,
}
#[derive(Clone, Copy, Debug)]
pub enum BarrierType {
UpAndOut,
DownAndOut,
UpAndIn,
DownAndIn,
}
#[derive(Debug, Clone, Copy)]
pub enum BinaryType {
AssetOrNothing,
CashOrNothing,
}