use crate::{
basic::persistent_btree::TreeDiff,
common::ende::{KeyEnDeOrdered, ValueEnDe},
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum DiffEntry<K, V> {
Added { key: K, value: V },
Removed { key: K, value: V },
Modified { key: K, old_value: V, new_value: V },
}
impl<K: KeyEnDeOrdered, V: ValueEnDe> DiffEntry<K, V> {
pub(crate) fn decode(raw: TreeDiff) -> Self {
let k = |b: Vec<u8>| K::from_bytes(b).unwrap();
let v = |b: Vec<u8>| V::decode(&b).unwrap();
match raw {
TreeDiff::Added { key, value } => Self::Added {
key: k(key),
value: v(value),
},
TreeDiff::Removed { key, value } => Self::Removed {
key: k(key),
value: v(value),
},
TreeDiff::Modified {
key,
old_value,
new_value,
} => Self::Modified {
key: k(key),
old_value: v(old_value),
new_value: v(new_value),
},
}
}
}