#[derive(Debug, Error)
enum AppError {
#[error("io: {0}")]
Io(#[from] io::Error)
}
Automatically generates From impls like this and a Display impl that lets you describe the error case with more detail. Very very good ergonomics and completely transparent to downstream libraries.It's a nice compromise between being precise on your errors with your code, but allowing you to be careless at the very end of the error lifecycle since running into errors there has very few ways of going about them, and you don't want to deal with the burden of updating that error handling all the time.