anyhow_tauri/
lib.rs

1use serde::Serialize;
2
3#[derive(Debug)]
4pub struct TACommandError(pub anyhow::Error);
5impl std::fmt::Display for TACommandError {
6    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
7        #[cfg(any(debug_assertions, feature = "show_errs_in_release"))]
8        {
9            write!(f, "{:#}", self.0)
10        }
11
12        #[cfg(not(any(debug_assertions, feature = "show_errs_in_release")))]
13        {
14            write!(f, "{}", self.0)
15        }
16    }
17}
18impl std::error::Error for TACommandError {}
19impl Serialize for TACommandError {
20    fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
21    where
22        S: serde::Serializer,
23    {
24        #[cfg(any(debug_assertions, feature = "show_errs_in_release"))]
25        {
26            serializer.serialize_str(&format!("{:#}", self.0))
27        }
28
29        #[cfg(not(any(debug_assertions, feature = "show_errs_in_release")))]
30        {
31            serializer.serialize_str("errors disabled in production.")
32        }
33    }
34}
35impl From<anyhow::Error> for TACommandError {
36    fn from(error: anyhow::Error) -> Self {
37        Self(error)
38    }
39}
40
41pub type TAResult<T> = std::result::Result<T, TACommandError>;
42pub trait IntoTAResult<T> {
43    fn into_ta_result(self) -> TAResult<T>;
44}
45
46impl<T, E> IntoTAResult<T> for std::result::Result<T, E>
47where
48    E: Into<anyhow::Error>,
49{
50    fn into_ta_result(self) -> TAResult<T> {
51        self.map_err(|e| TACommandError(e.into()))
52    }
53}
54impl<T> IntoTAResult<T> for anyhow::Error {
55    fn into_ta_result(self) -> TAResult<T> {
56        Err(TACommandError(self))
57    }
58}
59
60pub trait IntoEmptyTAResult<T> {
61    fn into_ta_empty_result(self) -> TAResult<T>;
62}
63impl IntoEmptyTAResult<()> for anyhow::Error {
64    fn into_ta_empty_result(self) -> TAResult<()> {
65        Err(TACommandError(self))
66    }
67}
68
69#[macro_export]
70macro_rules! bail {
71    ($msg:literal $(,)?) => {
72        return Err(anyhow::anyhow!($msg)).into_ta_result()
73    };
74    ($err:expr $(,)?) => {
75        return Err(anyhow::anyhow!($err)).into_ta_result()
76    };
77    ($fmt:expr, $($arg:tt)*) => {
78        return Err(anyhow::anyhow!($fmt, $($arg)*)).into_ta_result()
79    };
80}
81
82#[macro_export]
83macro_rules! ensure {
84    ($cond:expr $(,)?) => {
85        if !$cond {
86            return Err(anyhow::anyhow!(concat!(
87                "Condition failed: `",
88                stringify!($cond),
89                "`"
90            ))).into_ta_result();
91        }
92    };
93    ($cond:expr, $msg:literal $(,)?) => {
94        if !$cond {
95            return Err(anyhow::anyhow!($msg)).into_ta_result()
96        }
97    };
98    ($cond:expr, $err:expr $(,)?) => {
99        if !$cond {
100            return Err(anyhow::anyhow!($err)).into_ta_result()
101        }
102    };
103    ($cond:expr, $fmt:expr, $($arg:tt)*) => {
104        if !$cond {
105            return Err(anyhow::anyhow!($fmt, $($arg)*)).into_ta_result()
106        }
107    };
108}