pub trait CrdtMerge: Clone + private::Sealed {
fn merge(&mut self, other: &Self);
}
pub trait DeltaCrdt: CrdtMerge {
type Delta: Clone + Send + 'static;
fn take_delta(&mut self) -> Option<Self::Delta>;
fn merge_delta(&mut self, delta: &Self::Delta);
}
mod private {
pub trait Sealed {}
impl Sealed for crate::counters::GCounter {}
impl Sealed for crate::counters::PNCounter {}
impl Sealed for crate::flag::Flag {}
impl<T: Eq + std::hash::Hash + Clone> Sealed for crate::sets::GSet<T> {}
impl<T: Eq + std::hash::Hash + Clone> Sealed for crate::sets::OrSet<T> {}
impl<T: Clone> Sealed for crate::register::LwwRegister<T> {}
impl<K, V> Sealed for crate::maps::ORMap<K, V>
where
K: Eq + std::hash::Hash + Clone,
V: super::CrdtMerge,
{
}
impl<K, V> Sealed for crate::maps::LWWMap<K, V>
where
K: Eq + std::hash::Hash + Clone,
V: Clone,
{
}
impl<K> Sealed for crate::maps::PNCounterMap<K> where K: Eq + std::hash::Hash + Clone {}
impl<K, V> Sealed for crate::maps::ORMultiMap<K, V>
where
K: Eq + std::hash::Hash + Clone,
V: Eq + std::hash::Hash + Clone,
{
}
}