apple_quant_core/
unwrap_fast.rs1use std::fmt::Debug;
2
3use crate::log::AnyhowErrorExt;
4
5pub trait UnwrapOptionExt<T> {
6 unsafe fn unwrap_unchecked_release(
7 self,
8 ) -> T;
9
10 unsafe fn expect_unchecked_release(
11 self,
12 msg: &str,
13 ) -> T;
14}
15
16impl<T> UnwrapOptionExt<T> for Option<T> {
17 #[inline(always)]
18 unsafe fn unwrap_unchecked_release(
19 self,
20 ) -> T {
21 if cfg!(debug_assertions) {
22 self.unwrap()
23 } else {
24 unsafe {
25 self.unwrap_unchecked()
26 }
27 }
28 }
29
30 #[inline(always)]
31 unsafe fn expect_unchecked_release(
32 self,
33 msg: &str,
34 ) -> T {
35 if cfg!(debug_assertions) {
36 self.expect(msg)
37 } else {
38 unsafe {
39 self.unwrap_unchecked()
40 }
41 }
42 }
43}
44
45pub trait UnwrapResultExt<T, E> {
46 unsafe fn unwrap_unchecked_release(
47 self,
48 ) -> T;
49
50 unsafe fn expect_unchecked_release(
51 self,
52 msg: &str,
53 ) -> T;
54
55 unsafe fn unwrap_err_unchecked_release(
56 self,
57 ) -> E;
58
59 unsafe fn expect_err_unchecked_release(
60 self,
61 msg: &str,
62 ) -> E;
63}
64
65pub trait AnyhowResultExt<T> {
66 unsafe fn now_unchecked_release(
67 self,
68 ) -> T;
69
70 fn now_checked(
71 self,
72 ) -> Option<T>;
73}
74
75impl<T: Debug> AnyhowResultExt<T> for anyhow::Result<T> {
76 #[inline(always)]
77 unsafe fn now_unchecked_release(
78 self,
79 ) -> T {
80 #[cfg(debug_assertions)]
81 match self {
82 Ok(t) => t,
83 Err(e) => {
84 e.now();
85 panic!();
86 },
87 }
88
89 #[cfg(not(debug_assertions))]
90 unsafe {
91 self.unwrap_unchecked()
92 }
93 }
94
95 #[inline(always)]
96 fn now_checked(
97 self,
98 ) -> Option<T> {
99 match self {
100 Ok(t) => Some(t),
101 Err(e) => {
102 e.now();
103 None
104 },
105 }
106 }
107}
108
109impl<
110 T: Debug,
111 E: Debug,
112> UnwrapResultExt<T, E> for Result<T, E> {
113 #[inline(always)]
114 unsafe fn unwrap_unchecked_release(
115 self,
116 ) -> T {
117 if cfg!(debug_assertions) {
118 self.unwrap()
119 } else {
120 unsafe {
121 self.unwrap_unchecked()
122 }
123 }
124 }
125
126 #[inline(always)]
127 unsafe fn expect_unchecked_release(
128 self,
129 msg: &str,
130 ) -> T {
131 if cfg!(debug_assertions) {
132 self.expect(msg)
133 } else {
134 unsafe {
135 self.unwrap_unchecked()
136 }
137 }
138 }
139
140 #[inline(always)]
141 unsafe fn unwrap_err_unchecked_release(
142 self,
143 ) -> E {
144 if cfg!(debug_assertions) {
145 self.unwrap_err()
146 } else {
147 unsafe {
148 self.unwrap_err_unchecked()
149 }
150 }
151 }
152
153 #[inline(always)]
154 unsafe fn expect_err_unchecked_release(
155 self,
156 msg: &str,
157 ) -> E {
158 if cfg!(debug_assertions) {
159 self.expect_err(msg)
160 } else {
161 unsafe {
162 self.unwrap_err_unchecked()
163 }
164 }
165 }
166}