t set: NotPresent ``` In this example we end up mentioning that an env variable is not set, followed by our source message that says the env is not present, the only additional information we're communicating is the name of the environment variable being checked. The "expect as precondition" style instead focuses on source code readability, making it easier to understand what must have gone wrong in situations where panics are being used to represent bugs exclusively. Also, by framing our expect in terms of what "SHOULD" have happened to prevent the source error, we end up introducing new information that is independent from our source error. ```text thread 'main' panicked at src/main.rs:4:6: env variable `IMPORTANT_PATH` should be set by `wrapper_script.sh`: NotPresent ``` In this example we are communicating not only the name of the environment variable that should have been set, but also an explanation for why it should have been set, and we let the source error display as a clear contradiction to our expectation. **Hint**: If you're having trouble remembering how to phrase expect-as-precondition style error messages remember to focus on the word "should" as in "env variable should be set by blah" or "the given binary should be available and executable by the current user". [`panic_any`]: ../../std/panic/fn.panic_any.html [`PanicHookInfo`]: ../../std/panic/struct.PanicHookInfo.html [`PanicInfo`]: crate::panic::PanicInfo [`catch_unwind`]: ../../std/panic/fn.catch_unwind.html [`resume_unwind`]: ../../std/panic/fn.resume_unwind.html [`downcast`]: crate::error::Error [`Termination`]: ../../std/process/trait.Termination.html [`Try`]: crate::ops::Try [panic hook]: ../../std/panic/fn.set_hook.html [`set_hook`]: ../../std/panic/fn.set_hook.html [`take_hook`]: ../../std/panic/fn.take_hook.html [panic-handler]: [`match`]: ../../std/keyword.match.html [`?`]: ../../std/result/index.html#the-question-mark-operator-