chainerror/booksrc/tutorial8.md
2020-03-03 15:06:40 +01:00

807 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.

{{#include ../examples/tutorial8.rs}}
# #[allow(dead_code)]
# mod chainerror {
{{#rustdoc_include ../src/lib.rs:-1}}
# }