Skip to main content

apple_quant_algorithmic/volume/zeroable/
unchecked.rs

1use crate::volume::{ZeroableExt, ZeroableVolume};
2
3#[allow(dead_code)]
4#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
5pub struct ZeroableUnchecked<T: ZeroableVolume>(T);
6
7#[allow(dead_code)]
8impl<T: ZeroableVolume> ZeroableUnchecked<T> {
9	pub const ZERO: Self = Self(T::ZERO);
10
11	pub fn new(
12		t: T,
13	) -> Self {
14		Self(t)
15	}
16}
17
18impl<T: ZeroableVolume> ZeroableExt<T> for ZeroableUnchecked<T> {
19	fn as_optional_nonzero_ref(
20		&self,
21	) -> Option<&T> {
22		if self.0.is_zero() {
23			None
24		} else {
25			Some(&self.0)
26		}
27	}
28
29	fn as_optional_nonzero_mut(
30		&mut self,
31	) -> Option<&mut T> {
32		if self.0.is_zero() {
33			None
34		} else {
35			Some(&mut self.0)
36		}
37	}
38
39	fn into_optional_nonzero(
40		self,
41	) -> Option<T> {
42		if self.0.is_zero() {
43			None
44		} else {
45			Some(self.0)
46		}
47	}
48
49	fn as_zeroable(
50		&self,
51	) -> T {
52		self.0
53	}
54
55	fn into_zeroable(
56		self,
57	) -> T {
58		self.0
59	}
60
61	fn as_nonzero_unchecked_ref(
62		&self,
63	) -> &T {
64		&self.0
65	}
66
67	fn as_nonzero_unchecked_mut(
68		&mut self,
69	) -> &mut T {
70		&mut self.0
71	}
72
73	fn into_nonzero_unchecked(
74		self,
75	) -> T {
76		self.0
77	}
78}