delta-collections 0.1.4

Data structures with revertable operations called deltas.
Documentation
use super::*;
use ::serde::{Deserialize, Deserializer, Serialize, Serializer};

impl<K, V> Serialize for DeltaHashMap<K, V>
where
    K: Serialize,
    V: Serialize,
{
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: Serializer,
    {
        let Self { base, delta } = self;
        serializer.serialize_newtype_struct("DeltaHashMap", &(base, delta))
    }
}

impl<'de, K, V> Deserialize<'de> for DeltaHashMap<K, V>
where
    K: Deserialize<'de> + Eq + Hash,
    V: Deserialize<'de>,
{
    fn deserialize<D>(deserializer: D) -> Result<DeltaHashMap<K, V>, D::Error>
    where
        D: Deserializer<'de>,
    {
        let (base, delta) = Deserialize::deserialize(deserializer)?;
        Ok(DeltaHashMap { base, delta })
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_serde() {
        let mut map = DeltaHashMap::new();
        map.insert(1, 2);
        map.insert(3, 4);
        let json = serde_json::to_string(&map).unwrap();
        let map2: DeltaHashMap<i32, i32> = serde_json::from_str(&json).unwrap();
        assert_eq!(map, map2);
    }
}