use std::fmt::Display;
use crate::traits::FloatExt;
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum SwapDirection {
#[default]
Payer,
Receiver,
}
impl Display for SwapDirection {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::Payer => write!(f, "Payer"),
Self::Receiver => write!(f, "Receiver"),
}
}
}
#[derive(Default, Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum CrossCurrencySwapDirection {
#[default]
PayDomesticReceiveForeign,
ReceiveDomesticPayForeign,
}
impl Display for CrossCurrencySwapDirection {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
Self::PayDomesticReceiveForeign => write!(f, "Pay domestic / receive foreign"),
Self::ReceiveDomesticPayForeign => write!(f, "Receive domestic / pay foreign"),
}
}
}
#[derive(Debug, Clone)]
pub struct SwapValuation<T: FloatExt> {
pub fixed_leg_npv: T,
pub floating_leg_npv: T,
pub net_npv: T,
pub fair_rate: T,
pub annuity: T,
pub bpv: T,
pub dv01: T,
}
#[derive(Debug, Clone)]
pub struct BasisSwapValuation<T: FloatExt> {
pub pay_leg_npv: T,
pub receive_leg_npv: T,
pub net_npv: T,
pub fair_spread_on_pay_leg: T,
pub fair_spread_on_receive_leg: T,
pub pay_leg_bpv: T,
pub receive_leg_bpv: T,
}
#[derive(Debug, Clone)]
pub struct CrossCurrencyBasisSwapValuation<T: FloatExt> {
pub domestic_leg_npv: T,
pub foreign_leg_npv_foreign: T,
pub foreign_leg_npv_domestic: T,
pub net_npv: T,
pub domestic_leg_bpv: T,
pub foreign_leg_bpv_domestic: T,
pub fair_domestic_spread: T,
pub fair_foreign_spread: T,
}