// Created on savesnippets.com ยท https://savesnippets.com/NSB07PfhJppeZf use std::num::ParseIntError; fn double_first(strings: &[&str]) -> Result { 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 = s.parse::() .map(|n| n + 1) // transform on Ok .and_then(|n| n.checked_mul(2).ok_or_else(|| "overflow".parse::().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 = "7".parse().ok(); println!("{:?}", maybe); // Some(7) }