nodedb_crdt/validator/
core.rs1use std::collections::{HashMap, HashSet};
6
7use crate::constraint::ConstraintSet;
8use crate::dead_letter::DeadLetterQueue;
9use crate::deferred::DeferredQueue;
10use crate::policy::PolicyRegistry;
11use crate::signing::DeltaSigner;
12
13pub struct Validator {
22 pub(super) constraints: ConstraintSet,
23 pub(super) dlq: DeadLetterQueue,
24 pub(super) policies: PolicyRegistry,
25 pub(super) deferred: DeferredQueue,
26 pub(super) suffix_counter: HashMap<(String, String), u64>,
28 pub(super) delta_verifier: Option<DeltaSigner>,
31 pub(super) bitemporal_collections: HashSet<String>,
35}
36
37impl Validator {
38 pub fn new(constraints: ConstraintSet, dlq_capacity: usize) -> Self {
40 Self::new_with_policies(constraints, dlq_capacity, PolicyRegistry::new(), 1000)
41 }
42
43 pub fn new_with_policies(
45 constraints: ConstraintSet,
46 dlq_capacity: usize,
47 policies: PolicyRegistry,
48 deferred_capacity: usize,
49 ) -> Self {
50 Self {
51 constraints,
52 dlq: DeadLetterQueue::new(dlq_capacity),
53 policies,
54 deferred: DeferredQueue::new(deferred_capacity),
55 suffix_counter: HashMap::new(),
56 delta_verifier: None,
57 bitemporal_collections: HashSet::new(),
58 }
59 }
60
61 pub fn mark_bitemporal(&mut self, collection: impl Into<String>) {
64 self.bitemporal_collections.insert(collection.into());
65 }
66
67 pub fn is_bitemporal(&self, collection: &str) -> bool {
69 self.bitemporal_collections.contains(collection)
70 }
71
72 pub fn dlq(&self) -> &DeadLetterQueue {
74 &self.dlq
75 }
76
77 pub fn dlq_mut(&mut self) -> &mut DeadLetterQueue {
79 &mut self.dlq
80 }
81
82 pub fn policies(&self) -> &PolicyRegistry {
84 &self.policies
85 }
86
87 pub fn policies_mut(&mut self) -> &mut PolicyRegistry {
89 &mut self.policies
90 }
91
92 pub fn deferred(&self) -> &DeferredQueue {
94 &self.deferred
95 }
96
97 pub fn deferred_mut(&mut self) -> &mut DeferredQueue {
99 &mut self.deferred
100 }
101
102 pub fn set_delta_verifier(&mut self, verifier: DeltaSigner) {
105 self.delta_verifier = Some(verifier);
106 }
107
108 pub fn delta_verifier(&self) -> Option<&DeltaSigner> {
110 self.delta_verifier.as_ref()
111 }
112
113 pub fn delta_verifier_mut(&mut self) -> Option<&mut DeltaSigner> {
115 self.delta_verifier.as_mut()
116 }
117}