use crate::errors::QlResult;
use crate::termstructures::volatility::VolatilityType;
use crate::time::businessdayconvention::BusinessDayConvention;
use crate::time::calendar::Calendar;
use crate::time::date::Date;
use crate::time::daycounter::DayCounter;
use crate::types::{Natural, Rate, Real, Time, Volatility};
pub trait StrippedOptionletBase {
fn optionlet_strikes(&self, i: usize) -> QlResult<Vec<Rate>>;
fn optionlet_volatilities(&self, i: usize) -> QlResult<Vec<Volatility>>;
fn optionlet_fixing_dates(&self) -> QlResult<Vec<Date>>;
fn optionlet_fixing_times(&self) -> QlResult<Vec<Time>>;
fn optionlet_maturities(&self) -> usize;
fn atm_optionlet_rates(&self) -> QlResult<Vec<Rate>>;
fn day_counter(&self) -> Option<DayCounter>;
fn calendar(&self) -> Option<Calendar>;
fn settlement_days(&self) -> QlResult<Natural>;
fn business_day_convention(&self) -> BusinessDayConvention;
fn volatility_type(&self) -> VolatilityType;
fn displacement(&self) -> Real;
}