use pumpkin_checking::BoxedChecker;
#[cfg(doc)]
use pumpkin_checking::InferenceChecker;
use crate::containers::HashMap;
use crate::predicates::Predicate;
use crate::proof::InferenceCode;
#[derive(Clone, Debug, Default)]
pub struct CheckerStore {
inference_checkers: HashMap<InferenceCode, Vec<BoxedChecker<Predicate>>>,
}
impl CheckerStore {
pub fn for_inference_code(
&self,
inference_code: &InferenceCode,
) -> impl ExactSizeIterator<Item = &BoxedChecker<Predicate>> {
self.inference_checkers
.get(inference_code)
.map(|checkers| itertools::Either::Left(checkers.iter()))
.unwrap_or(itertools::Either::Right(std::iter::empty()))
}
pub fn add_inference_checker(
&mut self,
inference_code: InferenceCode,
checker: BoxedChecker<Predicate>,
) {
self.inference_checkers
.entry(inference_code.clone())
.or_default()
.push(checker);
}
}