Spending the weekend rewriting some early Rust projects and OMG some of this error handling is cringy. I've learned a lot about error handling in #rustlang since:
match & if let statements are easily nested into infinity - this style puts the "successful path" first, but its hard to debug and folks coming from other langs will curse you.