vertigo 0.11.4

Reactive Real-DOM library with SSR for Rust
Documentation
use super::inner_value::InnerValue;
use std::collections::BTreeMap;

pub struct BTreeMapMut<K: Ord, V> {
    data: InnerValue<BTreeMap<K, V>>,
}

impl<K: Ord, V> Default for BTreeMapMut<K, V> {
    fn default() -> Self {
        Self::new()
    }
}

impl<K: Ord, V> BTreeMapMut<K, V> {
    pub fn new() -> BTreeMapMut<K, V> {
        BTreeMapMut {
            data: InnerValue::new(BTreeMap::new()),
        }
    }

    pub fn insert(&self, key: K, value: V) -> Option<V> {
        let state = self.data.get_mut();
        state.insert(key, value)
    }

    pub fn remove(&self, key: &K) -> Option<V> {
        let state = self.data.get_mut();
        state.remove(key)
    }

    pub fn contains_key(&self, key: &K) -> bool {
        let state = self.data.get();
        state.contains_key(key)
    }

    pub fn is_empty(&self) -> bool {
        let state = self.data.get();
        state.is_empty()
    }

    pub fn take(&self) -> BTreeMap<K, V> {
        let state = self.data.get_mut();
        std::mem::take(state)
    }

    pub fn map<R>(&self, map_f: impl FnOnce(&BTreeMap<K, V>) -> R) -> R {
        let state = self.data.get();
        map_f(state)
    }

    pub fn change(&self, change_f: impl FnOnce(&mut BTreeMap<K, V>)) {
        let state = self.data.get_mut();
        change_f(state)
    }

    pub fn map_and_change<R>(&self, change_f: impl FnOnce(&mut BTreeMap<K, V>) -> R) -> R {
        let state = self.data.get_mut();
        change_f(state)
    }

    pub fn get_mut<R, F: FnOnce(&mut V) -> R>(&self, key: &K, callback: F) -> Option<R> {
        let state = self.data.get_mut();

        let item = state.get_mut(key);

        if let Some(elem) = item {
            return Some(callback(elem));
        }

        None
    }
}

impl<K: Ord, V: Clone> BTreeMapMut<K, V> {
    pub fn get_and_clone(&self, key: &K) -> Option<V> {
        let state = self.data.get();
        state.get(key).cloned()
    }
}