diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/crdt/deletable.rs | 10 | ||||
-rw-r--r-- | src/util/crdt/lww.rs | 10 |
2 files changed, 20 insertions, 0 deletions
diff --git a/src/util/crdt/deletable.rs b/src/util/crdt/deletable.rs index e771aceb..0594d850 100644 --- a/src/util/crdt/deletable.rs +++ b/src/util/crdt/deletable.rs @@ -9,6 +9,16 @@ pub enum Deletable<T> { Deleted, } +impl<T> Deletable<T> { + /// Map value, used for migrations + pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Deletable<U> { + match self { + Self::Present(x) => Deletable::<U>::Present(f(x)), + Self::Deleted => Deletable::<U>::Deleted, + } + } +} + impl<T: Crdt> Deletable<T> { /// Create a new deletable object that isn't deleted pub fn present(v: T) -> Self { diff --git a/src/util/crdt/lww.rs b/src/util/crdt/lww.rs index 80747406..f8b03b85 100644 --- a/src/util/crdt/lww.rs +++ b/src/util/crdt/lww.rs @@ -43,6 +43,16 @@ pub struct Lww<T> { v: T, } +impl<T> Lww<T> { + /// Map value, used for migrations + pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Lww<U> { + Lww::<U> { + ts: self.ts, + v: f(self.v), + } + } +} + impl<T> Lww<T> where T: Crdt, |