osom_lib_primitives/
key_value_pair.rs

1#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, Hash)]
2pub struct KeyValuePair<TKey, TValue> {
3    key: TKey,
4    value: TValue,
5}
6
7impl<TKey, TValue> KeyValuePair<TKey, TValue> {
8    #[inline(always)]
9    pub const fn new(key: TKey, value: TValue) -> Self {
10        Self { key, value }
11    }
12
13    #[inline(always)]
14    pub const fn from_tuple(tuple: (TKey, TValue)) -> Self {
15        let key = unsafe { core::ptr::read(&tuple.0) };
16        let value = unsafe { core::ptr::read(&tuple.1) };
17        let result = Self::new(key, value);
18        core::mem::forget(tuple);
19        result
20    }
21
22    #[inline(always)]
23    pub const fn key(&self) -> &TKey {
24        &self.key
25    }
26
27    #[inline(always)]
28    pub const fn key_mut(&mut self) -> &mut TKey {
29        &mut self.key
30    }
31
32    #[inline(always)]
33    pub const fn value(&self) -> &TValue {
34        &self.value
35    }
36
37    #[inline(always)]
38    pub const fn value_mut(&mut self) -> &mut TValue {
39        &mut self.value
40    }
41
42    #[inline(always)]
43    pub const fn into_tuple(self) -> (TKey, TValue) {
44        let key = unsafe { core::ptr::read(&self.key) };
45        let value = unsafe { core::ptr::read(&self.value) };
46        core::mem::forget(self);
47        (key, value)
48    }
49}
50
51impl<TKey, TValue> From<(TKey, TValue)> for KeyValuePair<TKey, TValue> {
52    fn from(tuple: (TKey, TValue)) -> Self {
53        Self::from_tuple(tuple)
54    }
55}
56
57impl<TKey, TValue> From<KeyValuePair<TKey, TValue>> for (TKey, TValue) {
58    fn from(pair: KeyValuePair<TKey, TValue>) -> Self {
59        pair.into_tuple()
60    }
61}