use std::cell::{Ref, RefMut};
use crate::{
ad::adreal::ADReal,
core::{marketdatahandling::constructedelementstore::SharedElement, pillars::Pillars},
indices::marketindex::MarketIndex,
volatility::volatilitysurface::VolatilitySurface,
};
pub trait ADVolatilitySurfaceElement:
VolatilitySurface<ADReal> + Pillars<ADReal> + Send + Sync
{
}
#[derive(Clone)]
pub struct VolatilitySurfaceElement {
market_index: MarketIndex,
surface: SharedElement<dyn ADVolatilitySurfaceElement>,
}
impl VolatilitySurfaceElement {
#[must_use]
pub fn new(
market_index: MarketIndex,
surface: SharedElement<dyn ADVolatilitySurfaceElement>,
) -> Self {
Self {
market_index,
surface,
}
}
#[must_use]
pub const fn market_index(&self) -> &MarketIndex {
&self.market_index
}
#[must_use]
pub fn surface(&self) -> Ref<'_, dyn ADVolatilitySurfaceElement> {
self.surface.borrow()
}
#[must_use]
pub fn surface_mut(&mut self) -> RefMut<'_, dyn ADVolatilitySurfaceElement> {
self.surface.borrow_mut()
}
}