use std::collections::{HashMap, HashSet};
use crate::constraint::ConstraintSet;
use crate::dead_letter::DeadLetterQueue;
use crate::deferred::DeferredQueue;
use crate::policy::PolicyRegistry;
use crate::signing::DeltaSigner;
pub struct Validator {
pub(super) constraints: ConstraintSet,
pub(super) dlq: DeadLetterQueue,
pub(super) policies: PolicyRegistry,
pub(super) deferred: DeferredQueue,
pub(super) suffix_counter: HashMap<(String, String), u64>,
pub(super) delta_verifier: Option<DeltaSigner>,
pub(super) bitemporal_collections: HashSet<String>,
}
impl Validator {
pub fn new(constraints: ConstraintSet, dlq_capacity: usize) -> Self {
Self::new_with_policies(constraints, dlq_capacity, PolicyRegistry::new(), 1000)
}
pub fn new_with_policies(
constraints: ConstraintSet,
dlq_capacity: usize,
policies: PolicyRegistry,
deferred_capacity: usize,
) -> Self {
Self {
constraints,
dlq: DeadLetterQueue::new(dlq_capacity),
policies,
deferred: DeferredQueue::new(deferred_capacity),
suffix_counter: HashMap::new(),
delta_verifier: None,
bitemporal_collections: HashSet::new(),
}
}
pub fn mark_bitemporal(&mut self, collection: impl Into<String>) {
self.bitemporal_collections.insert(collection.into());
}
pub fn is_bitemporal(&self, collection: &str) -> bool {
self.bitemporal_collections.contains(collection)
}
pub fn dlq(&self) -> &DeadLetterQueue {
&self.dlq
}
pub fn dlq_mut(&mut self) -> &mut DeadLetterQueue {
&mut self.dlq
}
pub fn policies(&self) -> &PolicyRegistry {
&self.policies
}
pub fn policies_mut(&mut self) -> &mut PolicyRegistry {
&mut self.policies
}
pub fn deferred(&self) -> &DeferredQueue {
&self.deferred
}
pub fn deferred_mut(&mut self) -> &mut DeferredQueue {
&mut self.deferred
}
pub fn set_delta_verifier(&mut self, verifier: DeltaSigner) {
self.delta_verifier = Some(verifier);
}
pub fn delta_verifier(&self) -> Option<&DeltaSigner> {
self.delta_verifier.as_ref()
}
pub fn delta_verifier_mut(&mut self) -> Option<&mut DeltaSigner> {
self.delta_verifier.as_mut()
}
}