mirror of
https://github.com/haraldh/chainerror.git
synced 2025-01-31 09:04:14 +01:00
883 B
883 B
Selective Error Handling
What about functions returning different Error types?
In this example func1()
can return either Func1ErrorFunc2
or Func1ErrorIO
.
We might want to match
on func1()
with something like:
fn main() -> Result<(), Box<Error + Send + Sync>> {
match func1() {
Err(e) if let Some(s) = e.downcast_chain_ref::<Func1ErrorIO>() =>
eprintln!("Func1ErrorIO:\n{:?}", s),
Err(e) if let Some(s) = e.downcast_chain_ref::<Func1ErrorFunc2>() =>
eprintln!("Func1ErrorFunc2:\n{:?}", s),
Ok(_) => {},
}
Ok(())
}
but this is not valid rust code, so we end up doing it the hard way. In the next chapter, we will see, how to solve this more elegantly.
{{#include ../examples/tutorial9.rs}}
# #[allow(dead_code)]
# mod chainerror {
{{#rustdoc_include ../src/lib.rs:-1}}
# }