pub struct CrdtResolver { /* private fields */ }Expand description
CRDT-based conflict resolver for geo-replicated events.
Thread-safe: uses DashMap internally for the version vector.
Supports configurable per-entity-type merge strategies via
with_strategies. Strategy lookup uses prefix
matching: a strategy registered for "config." applies to
"config.updated", "config.deleted", etc. The most specific
(longest) prefix match wins. Unmatched types fall back to AppendOnly.
Implementations§
Source§impl CrdtResolver
impl CrdtResolver
Sourcepub fn with_strategies(strategies: Vec<(String, MergeStrategy)>) -> Self
pub fn with_strategies(strategies: Vec<(String, MergeStrategy)>) -> Self
Create a CRDT resolver with per-event-type merge strategies.
Each entry is (prefix, strategy). Prefix matching is used:
"config." matches "config.updated". The longest matching
prefix wins. Unmatched types use AppendOnly.
Sourcepub fn resolve(&self, event: &ReplicatedEvent) -> ConflictResolution
pub fn resolve(&self, event: &ReplicatedEvent) -> ConflictResolution
Resolve whether an incoming replicated event should be accepted.
Returns Accept if the event is new, Skip if it’s a duplicate.
Consults the per-event-type merge strategy when one is registered.
Sourcepub fn accept(&self, event: &ReplicatedEvent)
pub fn accept(&self, event: &ReplicatedEvent)
Mark an event as accepted: update version vector, dedup set, and strategy state.
Sourcepub fn resolve_and_accept(&self, event: &ReplicatedEvent) -> ConflictResolution
pub fn resolve_and_accept(&self, event: &ReplicatedEvent) -> ConflictResolution
Resolve and accept in one step. Returns the resolution.
Sourcepub fn version_vector_for(&self, region_id: &str) -> Option<VersionVector>
pub fn version_vector_for(&self, region_id: &str) -> Option<VersionVector>
Get the version vector for a specific region.
Sourcepub fn all_version_vectors(&self) -> BTreeMap<String, VersionVector>
pub fn all_version_vectors(&self) -> BTreeMap<String, VersionVector>
Get all version vectors (for status/debug).
Sourcepub fn merge_version_vector(&self, region_id: &str, remote_vv: &VersionVector)
pub fn merge_version_vector(&self, region_id: &str, remote_vv: &VersionVector)
Merge a remote version vector into our local state.
Sourcepub fn seen_count(&self) -> usize
pub fn seen_count(&self) -> usize
Number of unique events seen.