Skip to main content

apple_quant_algorithmic/
unwrap_fast.rs

1use std::fmt::Debug;
2
3pub trait UnwrapOptionExt<T> {
4	fn unwrap_release_unsafe(self) -> T;
5}
6
7impl<T> UnwrapOptionExt<T> for Option<T> {
8	#[inline(always)]
9	fn unwrap_release_unsafe(self) -> T {
10		if cfg!(debug_assertions) {
11			self.unwrap()
12		} else {
13			unsafe { self.unwrap_unchecked() }
14		}
15	}
16}
17
18pub trait UnwrapResultExt<T, E> {
19	fn unwrap_release_unsafe(self) -> T;
20	fn unwrap_err_release_unsafe(self) -> E;
21}
22
23impl<T: Debug, E: Debug> UnwrapResultExt<T, E> for Result<T, E> {
24	#[inline(always)]
25	fn unwrap_release_unsafe(self) -> T {
26		if cfg!(debug_assertions) {
27			self.unwrap()
28		} else {
29			unsafe { self.unwrap_unchecked() }
30		}
31	}
32
33	#[inline(always)]
34	fn unwrap_err_release_unsafe(self) -> E {
35		if cfg!(debug_assertions) {
36			self.unwrap_err()
37		} else {
38			unsafe { self.unwrap_err_unchecked() }
39		}
40	}
41}