Skip to main content

tuwunel_core/utils/result/
debug_inspect.rs

1use super::Result;
2
3/// Inspect Result values with release-mode elision.
4pub trait DebugInspect<T, E> {
5	/// Inspects an Err contained value in debug-mode. In release-mode closure F
6	/// is elided.
7	#[must_use]
8	fn debug_inspect_err<F: FnOnce(&E)>(self, f: F) -> Self;
9
10	/// Inspects an Ok contained value in debug-mode. In release-mode closure F
11	/// is elided.
12	#[must_use]
13	fn debug_inspect<F: FnOnce(&T)>(self, f: F) -> Self;
14}
15
16#[cfg(debug_assertions)]
17impl<T, E> DebugInspect<T, E> for Result<T, E> {
18	#[inline]
19	fn debug_inspect<F>(self, f: F) -> Self
20	where
21		F: FnOnce(&T),
22	{
23		self.inspect(f)
24	}
25
26	#[inline]
27	fn debug_inspect_err<F>(self, f: F) -> Self
28	where
29		F: FnOnce(&E),
30	{
31		self.inspect_err(f)
32	}
33}
34
35#[cfg(not(debug_assertions))]
36impl<T, E> DebugInspect<T, E> for Result<T, E> {
37	#[inline]
38	fn debug_inspect<F>(self, _: F) -> Self
39	where
40		F: FnOnce(&T),
41	{
42		self
43	}
44
45	#[inline]
46	fn debug_inspect_err<F>(self, _: F) -> Self
47	where
48		F: FnOnce(&E),
49	{
50		self
51	}
52}