osom_lib_primitives/
key_value_pair.rs1#[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}