chainerror/booksrc/tutorial2.md
Harald Hoyer 4d2d807332 more doc
2018-12-20 16:32:00 +01:00

936 B

Simple Chained String Errors

Now with the help of the chainerror crate, we can have a nicer output.

Press the play button in the upper right corner and see the nice debug output.

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

What did we do here?

{{#include ../examples/tutorial2.rs:11:13}}

The macro cherr!(cause, newerror) stores cause as the source/cause of newerror and returns newerror, along with the filename (file!()) and line number (line!()).

Err(e)? then returns the error e applying e.into(), so that we again have a Err(Box<Error>) as a result.

The Debug implementation of ChainError<T> (which is returned by cherr!()) prints the Debug of T prefixed with the stored filename and line number.

ChainError<T> is in our case ChainError<String>.