apple_quant_algorithmic/volume/zeroable/
unchecked.rs1use 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}