Types and macros to help with common error handling in the Rust language