pub trait Quote {
fn value(&self) -> Option<f64>;
fn is_valid(&self) -> bool;
}
pub struct SimpleQuote {
value: Option<f64>,
}
impl SimpleQuote {
#[must_use]
pub fn new(value: Option<f64>) -> Self {
SimpleQuote { value }
}
pub fn set_value(&mut self, value: Option<f64>) -> f64 {
let diff = match (&self.value, &value) {
(Some(old_value), Some(new_value)) => new_value - old_value,
_ => 0.0,
};
if diff != 0.0 {
self.value = value;
}
diff
}
pub fn reset(&mut self) {
self.set_value(None);
}
}
impl Quote for SimpleQuote {
fn value(&self) -> Option<f64> {
self.value
}
fn is_valid(&self) -> bool {
self.value.is_some()
}
}
pub struct DerivedQuote<F>
where
F: Fn(f64) -> f64, {
_value: Option<f64>,
_function: F,
}