Macro trace
Source macro_rules! trace {
(Err($err: expr)) => { ... };
(|| $err: expr) => { ... };
($ret: expr, $($err:expr),+) => { ... };
($err_kind: path) => { ... };
}
Expand description
ยงUsages
use tracing_ext::trace;
#[derive(Debug, thiserror::Error)]
enum Error {
#[error("")]
A,
#[error("")]
B(String),
}
fn do_something() -> Result<(), Error> {
let result: Result<(), String> = Ok(());
match result {
Ok(s) => s,
Err(err) => return trace!(Err(Error::A)),
Err(err) => {
let err = Error::A;
tracing::error!("{}", err);
return Err(err);
}
};
None.ok_or(trace!(Error::A, "b error: {}", "something"))?;
None.ok_or({
tracing::error!("b error: {}", "something");
Error::A
})?;
result.clone().map_err(trace!(Error::B))?;
result.map_err(|err| {
let err = Error::B(err);
tracing::error!("{}", err);
err
})?;
Ok(())
}