use crate::{Assumable, Assumption, AssumptionError, PropagatingEffect};
use std::sync::Arc;
pub trait Transferable {
fn get_assumptions(&self) -> &Option<Arc<Vec<Assumption>>>;
fn verify_assumptions(&self, effect: &[PropagatingEffect<f64>]) -> Result<(), AssumptionError> {
if effect.is_empty() {
return Err(AssumptionError::NoDataToTestDefined);
}
if self.get_assumptions().is_none() {
return Err(AssumptionError::NoAssumptionsDefined);
}
let assumptions = self.get_assumptions().as_ref().unwrap();
for assumption in assumptions.iter() {
if !assumption.verify_assumption(effect)? {
return Err(AssumptionError::AssumptionFailed(assumption.to_string()));
}
}
Ok(())
}
}