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