pumpkin_core/checkers/
store.rs1use pumpkin_checking::BoxedChecker;
5#[cfg(doc)]
6use pumpkin_checking::InferenceChecker;
7
8use crate::containers::HashMap;
9use crate::predicates::Predicate;
10use crate::proof::InferenceCode;
11
12#[derive(Clone, Debug, Default)]
17pub struct CheckerStore {
18 inference_checkers: HashMap<InferenceCode, Vec<BoxedChecker<Predicate>>>,
20}
21
22impl CheckerStore {
23 pub fn for_inference_code(
25 &self,
26 inference_code: &InferenceCode,
27 ) -> impl ExactSizeIterator<Item = &BoxedChecker<Predicate>> {
28 self.inference_checkers
29 .get(inference_code)
30 .map(|checkers| itertools::Either::Left(checkers.iter()))
31 .unwrap_or(itertools::Either::Right(std::iter::empty()))
32 }
33
34 pub fn add_inference_checker(
39 &mut self,
40 inference_code: InferenceCode,
41 checker: BoxedChecker<Predicate>,
42 ) {
43 self.inference_checkers
44 .entry(inference_code.clone())
45 .or_default()
46 .push(checker);
47 }
48}