// `?` expands to an early return on the error branch. #[derive(Debug)] enum Error { Odd, } fn halve(n: i32) -> Result { if n % 2 != 0 { return Err(Error::Odd); } Ok(n / 2) } fn quarter(n: i32) -> Result { let half = halve(n)?; let q = halve(half)?; Ok(q) } fn main() { println!("{:?}", quarter(8)); println!("{:?}", quarter(6)); println!("{:?}", quarter(5)); }