mod compositequote;
mod deltavolquote;
mod derivedquote;
mod futuresconvadjustmentquote;
mod multicompositequote;
mod simplequote;
pub use compositequote::CompositeQuote;
pub use deltavolquote::{AtmType, DeltaType, DeltaVolQuote};
pub use derivedquote::DerivedQuote;
pub use futuresconvadjustmentquote::FuturesConvAdjustmentQuote;
pub use multicompositequote::MultiCompositeQuote;
pub use simplequote::{SimpleQuote, make_quote_handle};
use std::cell::Cell;
use crate::errors::QlResult;
use crate::patterns::observable::{AsObservable, Observable, ResetThenNotify};
use crate::shared::{Shared, SharedMut, shared};
use crate::types::Real;
pub trait Quote: AsObservable {
fn value(&self) -> QlResult<Real>;
fn is_valid(&self) -> bool;
}
fn invalidator() -> (
Shared<Cell<Option<Real>>>,
Shared<Observable>,
SharedMut<ResetThenNotify>,
) {
let cache = shared(Cell::new(None));
let observable = shared(Observable::new());
let listener = ResetThenNotify::broadcasting(Shared::clone(&observable), {
let cache = Shared::clone(&cache);
move || cache.set(None)
});
(cache, observable, listener)
}