When should the panic! macro be called instead of using std::result::Result?
when there is a way to encode the information in types used
when your code is expected to end in a good state
when the situation is considered unrecoverable
when valid values are passed on the code