1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
// `?` expands to an early return on the error branch.
#[derive(Debug)]
enum Error {
Odd,
}
fn halve(n: i32) -> Result<i32, Error> {
if n % 2 != 0 {
return Err(Error::Odd);
}
Ok(n / 2)
}
fn quarter(n: i32) -> Result<i32, Error> {
let half = halve(n)?;
let q = halve(half)?;
Ok(q)
}
fn main() {
println!("{:?}", quarter(8));
println!("{:?}", quarter(6));
println!("{:?}", quarter(5));
}
|