unc_sdk/store/unordered_map/
impls.rs

1use std::borrow::Borrow;
2
3use borsh::{BorshDeserialize, BorshSerialize};
4
5use super::{ToKey, UnorderedMap, ERR_NOT_EXIST};
6use crate::env;
7
8impl<K, V, H> Extend<(K, V)> for UnorderedMap<K, V, H>
9where
10    K: BorshSerialize + Ord + BorshDeserialize + Clone,
11    V: BorshSerialize + BorshDeserialize,
12    H: ToKey,
13{
14    fn extend<I>(&mut self, iter: I)
15    where
16        I: IntoIterator<Item = (K, V)>,
17    {
18        for (key, value) in iter {
19            self.insert(key, value);
20        }
21    }
22}
23
24impl<K, V, H, Q: ?Sized> core::ops::Index<&Q> for UnorderedMap<K, V, H>
25where
26    K: BorshSerialize + Ord + Clone + Borrow<Q>,
27    V: BorshSerialize + BorshDeserialize,
28    H: ToKey,
29
30    Q: BorshSerialize + ToOwned<Owned = K>,
31{
32    type Output = V;
33
34    /// Returns reference to value corresponding to key.
35    ///
36    /// # Panics
37    ///
38    /// Panics if the key does not exist in the map
39    fn index(&self, index: &Q) -> &Self::Output {
40        self.get(index).unwrap_or_else(|| env::panic_str(ERR_NOT_EXIST))
41    }
42}