stable-map 0.15.0

A hash map with temporarily stable indices
Documentation
#[cfg(test)]
mod tests;

use {
    crate::StableMap,
    core::hash::{BuildHasher, Hash},
    hashbrown::HashMap,
};

impl<K, V, S, const N: usize> From<[(K, V); N]> for StableMap<K, V, S>
where
    K: Eq + Hash,
    S: BuildHasher + Default,
{
    fn from(value: [(K, V); N]) -> Self {
        let mut map = Self::with_capacity_and_hasher(N, S::default());
        for (k, v) in value {
            map.insert(k, v);
        }
        map
    }
}

impl<K, V, S> From<HashMap<K, V, S>> for StableMap<K, V, S>
where
    K: Eq + Hash,
    S: BuildHasher + Clone,
{
    fn from(value: HashMap<K, V, S>) -> Self {
        let mut map = Self::with_capacity_and_hasher(value.len(), value.hasher().clone());
        for (k, v) in value {
            map.insert(k, v);
        }
        map
    }
}

impl<K, V, S> From<StableMap<K, V, S>> for HashMap<K, V, S>
where
    K: Eq + Hash,
    S: BuildHasher + Clone,
{
    fn from(value: StableMap<K, V, S>) -> Self {
        let mut map = Self::with_capacity_and_hasher(value.len(), value.hasher().clone());
        for (k, v) in value {
            map.insert(k, v);
        }
        map
    }
}