use std::num::ParseIntError;
fn double_first(strings: &[&str]) -> Result<i32, ParseIntError> {
let first = strings.first().unwrap_or(&"0");
let n: i32 = first.parse()?; // early-return on parse error
Ok(n * 2)
}
// Combinators chain like Option
fn main() {
let s = "42";
let result: Result<i32, ParseIntError> = s.parse::<i32>()
.map(|n| n + 1) // transform on Ok
.and_then(|n| n.checked_mul(2).ok_or_else(|| "overflow".parse::<i32>().unwrap_err()));
println!("{:?}", result); // Ok(86)
// unwrap_or / map_err / ok() / err() are all on Result too
let fallback: i32 = "x".parse().unwrap_or(0);
println!("{fallback}"); // 0
// From .ok() you get an Option, discarding the error
let maybe: Option<i32> = "7".parse().ok();
println!("{:?}", maybe); // Some(7)
}
Create a free account and build your private vault. Share publicly whenever you want.