Rust

Result Combinators + the ? Operator

admin by @admin ADMIN
1d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
`Result<T, E>` chains like `Option`. The `?` operator unwraps `Ok` or early-returns the `Err`, converting via `From` so callers can use one error type for many sources.
Rust
Raw
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)
}
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.