baz(foo).expect(format!("Cannot do baz, foo={}", foo)).bar().expect("Cannot do bar"); baz(foo).expect(format!("Cannot do baz, foo={}", foo)).bar().expect("Cannot do bar");The best solution I know is error-chain library:
use errors::ChainErr;
try!(do_something().chain_err(|| "Something went wrong")); [reports.rs:25] ERROR: Cannot write report "Foo" to file "foo.xml".
[templates.rs:125] ERROR: Cannot process template "header". Check is template file exists and readable.
[fileio.rs:45] ERROR: Cannot open file "/usr/share/foo/templates/header.tmpl": unable to enter directory "/usr/share/foo". Check directory permissions.
Instead of writing report cannot open file done
It saves lot of time(money) in production.