clashmap/mapref/
multiple.rs1use 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}