Check out https://docs.rs/thiserror/latest/thiserror/. You can do this:
#[derive(Debug, thiserror::Error)]
pub enum MyError {
#[error("Failed to do the thing, blabla, put something clear here")]
DoingTheThing(#[from] LibraryError)
}
And then you can just do foo(a, b)? because there's now a From impl for MyError from LibraryError.
You now get a proper error chain via source(). You can use this to have a nice report at the top level using https://docs.rs/thiserror-ext/0.3.0/thiserror_ext/struct.Report.html that looks like this:
Outer error text
Caused by these errors (recent errors listed first):
1. Middle error text
2. Inner error text