use std::fmt::{Display, Formatter, Result as fmtResult};
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum OptionType {
Call,
Put,
}
impl Display for OptionType {
fn fmt(&self, f: &mut Formatter) -> fmtResult {
match self {
OptionType::Call => write!(f, "Call"),
OptionType::Put => write!(f, "Put"),
}
}
}
#[derive(Debug, Clone, PartialEq)]
pub struct Inputs {
pub option_type: OptionType,
pub s: f32,
pub k: f32,
pub p: Option<f32>,
pub r: f32,
pub q: f32,
pub t: f32,
pub sigma: Option<f32>,
}
impl Inputs {
pub fn new(
option_type: OptionType,
s: f32,
k: f32,
p: Option<f32>,
r: f32,
q: f32,
t: f32,
sigma: Option<f32>,
) -> Self {
Self {
option_type,
s,
k,
p,
r,
q,
t,
sigma,
}
}
}
impl Display for Inputs {
fn fmt(&self, f: &mut Formatter) -> fmtResult {
writeln!(f, "Option type: {}", self.option_type)?;
writeln!(f, "Stock price: {:.2}", self.s)?;
writeln!(f, "Strike price: {:.2}", self.k)?;
match self.p {
Some(p) => writeln!(f, "Option price: {:.2}", p)?,
None => writeln!(f, "Option price: None")?,
}
writeln!(f, "Risk-free rate: {:.4}", self.r)?;
writeln!(f, "Dividend yield: {:.4}", self.q)?;
writeln!(f, "Time to maturity: {:.4}", self.t)?;
match self.sigma {
Some(sigma) => writeln!(f, "Volatility: {:.4}", sigma)?,
None => writeln!(f, "Volatility: None")?,
}
Ok(())
}
}