defuse_near_utils/
panic.rs1use std::fmt::Display;
2
3use near_sdk::{FunctionError, env};
4
5pub trait PanicError {
6 #[inline]
7 #[track_caller]
8 fn panic_str(&self) -> !
9 where
10 Self: AsRef<str>,
11 {
12 env::panic_str(self.as_ref())
13 }
14
15 #[inline]
16 #[track_caller]
17 fn panic_static_str(self) -> !
18 where
19 Self: Into<&'static str>,
20 {
21 self.into().panic_str()
22 }
23
24 #[inline]
25 #[track_caller]
26 fn panic_display(&self) -> !
27 where
28 Self: Display,
29 {
30 self.to_string().panic_str()
31 }
32}
33impl<E> PanicError for E {}
34
35pub trait UnwrapOrPanic<T> {
36 fn unwrap_or_panic(self) -> T;
37}
38
39impl<T> UnwrapOrPanic<T> for Option<T> {
40 #[inline]
41 #[track_caller]
42 fn unwrap_or_panic(self) -> T {
43 self.unwrap_or_else(|| env::abort())
44 }
45}
46
47impl<T, E> UnwrapOrPanic<T> for Result<T, E>
48where
49 E: FunctionError,
50{
51 #[inline]
52 #[track_caller]
53 fn unwrap_or_panic(self) -> T
54 where
55 E: FunctionError,
56 {
57 self.unwrap_or_else(|err| err.panic())
58 }
59}
60
61pub trait UnwrapOrPanicError<T, E> {
62 fn unwrap_or_panic_str(self) -> T
63 where
64 E: AsRef<str>;
65
66 fn unwrap_or_panic_static_str(self) -> T
67 where
68 E: Into<&'static str>;
69
70 fn unwrap_or_panic_display(self) -> T
71 where
72 E: Display;
73}
74
75impl<T, E> UnwrapOrPanicError<T, E> for Result<T, E> {
76 #[inline]
77 #[track_caller]
78 fn unwrap_or_panic_str(self) -> T
79 where
80 E: AsRef<str>,
81 {
82 self.unwrap_or_else(|err| err.panic_str())
83 }
84
85 #[inline]
86 #[track_caller]
87 fn unwrap_or_panic_static_str(self) -> T
88 where
89 E: Into<&'static str>,
90 {
91 self.unwrap_or_else(|err| err.panic_static_str())
92 }
93
94 #[inline]
95 #[track_caller]
96 fn unwrap_or_panic_display(self) -> T
97 where
98 E: Display,
99 {
100 self.unwrap_or_else(|err| err.panic_display())
101 }
102}