stacktrace::trace!
[−]
[src]
macro_rules! trace { (struct $trace:ident; $($a:ty => $b:ty,)*) => { ... }; (struct $name:ident; $($a:ty => $b:ty),*) => { ... }; (struct $name:ident) => { ... }; ($($a:ty => $b:ty,)*) => { ... }; ($($a:ty => $b:ty),*) => { ... }; }
Helper macro for defining a Trace
struct, and instances of From<Trace<B>>
for Trace<A>
.
Example use
#[macro_use] extern crate stacktrace; pub struct Error1(usize); pub struct Error2(String); impl From<Error1> for Error2 { fn from(err: Error1) -> Error2 { Error2(format!("{}", err.0)) } } trace!{Error1 => Error2} fn makes_a_traced_error() -> Result<(), Trace<Error1>> { try!(Err(Error1(1337))); // Uses generic instance of "From<Err>" for "Trace<Err>" Ok(()) } fn propagates_a_traced_error() -> Result<(), Trace<Error2>> { try!(makes_a_traced_error()); // Uses the macro-generated instance of "From<Trace<Error1>>" for "Trace<Error2>" Ok(()) }
Advanced use
The trace
macro takes an optional initial 'name' parameter: trace!{struct MyTrace}
will define
a struct named Example
that behaves exactly like the default Trace
struct.
#[macro_use] extern crate stacktrace; pub struct Error1(usize); pub struct Error2(String); impl From<Error1> for Error2 { fn from(err: Error1) -> Error2 { Error2(format!("{}", err.0)) } } trace!{struct MyTrace; Error1 => Error2} fn makes_a_traced_error() -> Result<(), MyTrace<Error1>> { try!(Err(Error1(1337))); // Uses generic instance of "From<Err>" for "MyTrace<Err>" Ok(()) } fn propagates_a_traced_error() -> Result<(), MyTrace<Error2>> { try!(makes_a_traced_error()); // Uses the macro-generated instance of "From<MyTrace<Error1>>" for "MyTrace<Error2>" Ok(()) }