fn main() {
foo().map_err(|err| println!("{:?}", err));
}
fn foo() -> Result<(), std::io::Error> {
Ok(())
}
results:
warning: unused `std::result::Result` that must be used
--> src/main.rs:2:5
|
2 | foo().map_err(|err| println!("{:?}", err));
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
= note: #[warn(unused_must_use)] on by default
= note: this `Result` may be an `Err` variant, which should be handled
Finished dev [unoptimized + debuginfo] target(s) in 0.58s
Running `target/debug/playground`
playground link
You're not handling the result, you're mapping the result from one type to another.
foo().map_err(|err| println!("{:?}", err));
What that line does is call foo()
, which returns Result<(), std::io::Error>
. Then map_err
uses the type returned by your closure (in this case, ()
), and modifies the error type and returns Result<(), ()>
. This is the result that you are not handling. Since you seem to want to just ignore this result, the simplest thing to do would probably be to call ok()
.
foo().map_err(|err| println!("{:?}", err)).ok();
ok()
converts Result<T,E>
to Option<T>
, converting errors to None
, which you won't get a warning for ignoring.
Alternatively:
match foo() {
Err(e) => println!("{:?}", e),
_ => ()
}
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