use crate::{ad::adreal::IsReal, time::date::Date, utils::errors::Result};
pub trait Cashflow<T>
where
T: IsReal,
{
fn amount(&self) -> Result<T>;
fn payment_date(&self) -> Date;
}
#[derive(Clone)]
pub struct SimpleCashflow<T>
where
T: IsReal,
{
amount: T,
payment_date: Date,
}
impl<T> SimpleCashflow<T>
where
T: IsReal,
{
pub const fn new(amount: T, payment_date: Date) -> Self {
Self {
amount,
payment_date,
}
}
}
impl<T> Cashflow<T> for SimpleCashflow<T>
where
T: IsReal,
{
fn amount(&self) -> Result<T> {
Ok(self.amount)
}
fn payment_date(&self) -> Date {
self.payment_date
}
}