clashmap/mapref/
multiple.rs

1use crate::tableref;
2use core::ops::{Deref, DerefMut};
3
4pub struct RefMulti<'a, K, V> {
5    inner: tableref::multiple::RefMulti<'a, (K, V)>,
6}
7
8impl<K, V> Clone for RefMulti<'_, K, V> {
9    fn clone(&self) -> Self {
10        Self {
11            inner: self.inner.clone(),
12        }
13    }
14}
15
16impl<'a, K, V> RefMulti<'a, K, V> {
17    pub(crate) fn new(inner: tableref::multiple::RefMulti<'a, (K, V)>) -> Self {
18        Self { inner }
19    }
20
21    pub fn key(&self) -> &K {
22        &self.inner.value().0
23    }
24
25    pub fn value(&self) -> &V {
26        &self.inner.value().1
27    }
28
29    pub fn pair(&self) -> (&K, &V) {
30        let (k, v) = self.inner.value();
31        (k, v)
32    }
33}
34
35impl<K, V> Deref for RefMulti<'_, K, V> {
36    type Target = V;
37
38    fn deref(&self) -> &V {
39        self.value()
40    }
41}
42
43pub struct RefMutMulti<'a, K, V> {
44    inner: tableref::multiple::RefMutMulti<'a, (K, V)>,
45}
46
47impl<'a, K, V> RefMutMulti<'a, K, V> {
48    pub(crate) fn new(inner: tableref::multiple::RefMutMulti<'a, (K, V)>) -> Self {
49        Self { inner }
50    }
51
52    pub fn key(&self) -> &K {
53        &self.inner.value().0
54    }
55
56    pub fn value(&self) -> &V {
57        &self.inner.value().1
58    }
59
60    pub fn value_mut(&mut self) -> &mut V {
61        &mut self.inner.value_mut().1
62    }
63
64    pub fn pair(&self) -> (&K, &V) {
65        let (k, v) = self.inner.value();
66        (k, v)
67    }
68
69    pub fn pair_mut(&mut self) -> (&K, &mut V) {
70        let (k, v) = self.inner.value_mut();
71        (k, v)
72    }
73}
74
75impl<K, V> Deref for RefMutMulti<'_, K, V> {
76    type Target = V;
77
78    fn deref(&self) -> &V {
79        self.value()
80    }
81}
82
83impl<K, V> DerefMut for RefMutMulti<'_, K, V> {
84    fn deref_mut(&mut self) -> &mut V {
85        self.value_mut()
86    }
87}