I want this function to return an error result:
fn get_result() -> Result<String, std::io::Error> {
// Ok(String::from("foo")) <- works fine
Result::Err(String::from("foo"))
}
Error Message
error[E0308]: mismatched types
--> src/main.rs:3:17
|
3 | Result::Err(String::from("foo"))
| ^^^^^^^^^^^^^^^^^^^ expected struct `std::io::Error`, found struct `std::string::String`
|
= note: expected type `std::io::Error`
found type `std::string::String`
I'm confused how I can print out an error message when using the expected struct.
The error message is quite clear. Your return type for get_result
is Result<String, std::io::Error>
, meaning that in the Result::Ok
case, the inner value of the Ok
variant is of type String
, whereas in the Result::Err
case, the inner value of the Err
variant is of type std::io::Error
.
Your code attempted to create an Err
variant with an inner value of type String
, and the compiler rightfully complains about a type mismatch. To create a new std::io::Error
, you can use the new
method on std::io::Error
. Here's an example of your code using the correct types:
fn get_result() -> Result<String, std::io::Error> {
Err(std::io::Error::new(std::io::ErrorKind::Other, "foo"))
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With