osom_lib_primitives/
does_not_have_to_be_used.rs

1/// A wrapper around any value that does not have to be used.
2///
3/// The purpose of this struct is to override `#[must_use]` attribute
4/// set on `T`.
5#[derive(Debug, Default, PartialEq, Eq, Hash, Clone)]
6#[repr(transparent)]
7pub struct DoesNotHaveToBeUsed<T> {
8    pub value: T,
9}
10
11impl<T> core::ops::Deref for DoesNotHaveToBeUsed<T> {
12    type Target = T;
13    fn deref(&self) -> &Self::Target {
14        &self.value
15    }
16}
17
18impl<T> core::ops::DerefMut for DoesNotHaveToBeUsed<T> {
19    fn deref_mut(&mut self) -> &mut Self::Target {
20        &mut self.value
21    }
22}
23
24impl<T> AsRef<T> for DoesNotHaveToBeUsed<T> {
25    fn as_ref(&self) -> &T {
26        &self.value
27    }
28}
29
30impl<T> AsMut<T> for DoesNotHaveToBeUsed<T> {
31    fn as_mut(&mut self) -> &mut T {
32        &mut self.value
33    }
34}
35
36impl<T> core::borrow::Borrow<T> for DoesNotHaveToBeUsed<T> {
37    fn borrow(&self) -> &T {
38        &self.value
39    }
40}
41
42impl<T> From<T> for DoesNotHaveToBeUsed<T> {
43    fn from(value: T) -> Self {
44        Self { value }
45    }
46}
47
48unsafe impl<T: Send> Send for DoesNotHaveToBeUsed<T> {}
49unsafe impl<T: Sync> Sync for DoesNotHaveToBeUsed<T> {}