1use core::borrow::Borrow;
4
5pub trait Map {
7 type Key;
9
10 type Value;
12}
13
14pub trait MapGet<K: ?Sized>: Map
16where
17 Self::Key: Borrow<K>,
18{
19 fn get(&self, key: &K) -> Option<&Self::Value>;
21
22 #[inline]
24 fn contains_key(&self, key: &K) -> bool {
25 self.get(key).is_some()
26 }
27}
28
29pub trait MapMut<K: ?Sized>: MapGet<K>
31where
32 Self::Key: Borrow<K>,
33{
34 fn get_mut(&mut self, key: &K) -> Option<&mut Self::Value>;
36
37 fn remove(&mut self, key: &K) -> Option<Self::Value>;
39}
40
41pub trait MapInsert: Map {
43 fn insert(&mut self, key: Self::Key, value: Self::Value) -> Option<Self::Value>;
45}