To explain
There are 2 Error
struct / enum declarations, probably in separate files
To the ?
, they are different types and cannot be converted from one to the other (because they are two disparate structs that happen to have the same name, but can have different bodies)
To fix this
You can either use .some_func_result().map_err(|err| /* conversion here/*)?;
+
Or you can impl From<Error1> for Error2
And you should also name it ThingError
, so you can visually differentiate the two
+ There are like 10 different mapping functions, depending on if you’re using an option or a result
I never remember which one specifically i need, (unwrap_or
, map_or
, map_or_else
, ok
, ok_or
)
I usually just hunt through the auto complete list until i find the function signature that gives me what i need
I can confirm, I’ve never used a non memory managed language, and the Rust borrow checker is a massive kick in the teeth
But, the more i consider it from the perspective of memory, and pointers, the borrow checker makes a lot of sense
Especially when storing references inside structs, and how mutability affects references
I actually figured out i could fix a re-mutable borrow error by performing the two mutable operations in separate for loops