Handling Result<T, E> in Rust.
Result<T, E>? — Propagate error (most common)fn do_stuff() -> Result<(), Error> {
let data = might_fail()?; // Returns early if Err
Ok(())
}
match — Handle both cases explicitlymatch client.fetch_exchange_info().await {
Ok(info) => println!("{:#?}", info),
Err(e) => eprintln!("Failed: {}", e),
}
if let — Only care about one caseif let Ok(info) = client.fetch_exchange_info().await {
println!("{:#?}", info);
}
.unwrap() / .expect() — Crash on errorlet info = result.unwrap(); // Panics with generic message
let info = result.expect("API down"); // Panics with your message
.unwrap_or() / .unwrap_or_default() — Fallback valuelet count = result.unwrap_or(0); // Use 0 if error
let name = result.unwrap_or_default(); // Use String::default() ("")
.unwrap_or_else() — Fallback with logiclet info = result.unwrap_or_else(|e| {
eprintln!("Error: {}", e);
ExchangeInfo::default()
});
.ok() — Convert to Option, discard errorlet maybe_info: Option<ExchangeInfo> = result.ok();
.map() / .map_err() — Transform inner valuelet lengths = result.map(|info| info.symbols.len());
let custom_err = result.map_err(|e| MyError::from(e));