chainerror/booksrc/tutorial8.md
2018-12-21 13:50:08 +01:00

832 B

Finding an Error cause

To distinguish the errors occuring in various places, we can define named string errors with the "new type" pattern.

derive_str_cherr!(Func2Error);
derive_str_cherr!(Func1Error);

Instead of ChainError<String> we now have struct Func1Error(String) and ChainError<Func1Error>.

In the main function you can see, how we can match the different errors.

Also see:

            if let Some(f2err) = f1err.find_chain_cause::<Func2Error>() {

as a shortcut to

            if let Some(f2err) = f1err.find_cause::<ChainError<Func2Error>>() {

hiding the ChainError<T> implementation detail.

use crate::chainerror::*;
{{#include ../examples/tutorial8.rs:2:}}
# #[allow(dead_code)]
# mod chainerror {
{{#includecomment ../src/lib.rs}}
# }