]>
Commit | Line | Data |
---|---|---|
b7449926 | 1 | // run-pass |
416331ca | 2 | #![allow(deprecated)] // for deprecated `try!()` macro |
54a0048b SL |
3 | use std::num::{ParseFloatError, ParseIntError}; |
4 | ||
5 | fn main() { | |
6 | assert_eq!(simple(), Ok(1)); | |
7 | assert_eq!(nested(), Ok(2)); | |
8 | assert_eq!(merge_ok(), Ok(3.0)); | |
9 | assert_eq!(merge_int_err(), Err(Error::Int)); | |
10 | assert_eq!(merge_float_err(), Err(Error::Float)); | |
11 | } | |
12 | ||
13 | fn simple() -> Result<i32, ParseIntError> { | |
14 | Ok(try!("1".parse())) | |
15 | } | |
16 | ||
17 | fn nested() -> Result<i32, ParseIntError> { | |
18 | Ok(try!(try!("2".parse::<i32>()).to_string().parse::<i32>())) | |
19 | } | |
20 | ||
21 | fn merge_ok() -> Result<f32, Error> { | |
22 | Ok(try!("1".parse::<i32>()) as f32 + try!("2.0".parse::<f32>())) | |
23 | } | |
24 | ||
25 | fn merge_int_err() -> Result<f32, Error> { | |
26 | Ok(try!("a".parse::<i32>()) as f32 + try!("2.0".parse::<f32>())) | |
27 | } | |
28 | ||
29 | fn merge_float_err() -> Result<f32, Error> { | |
30 | Ok(try!("1".parse::<i32>()) as f32 + try!("b".parse::<f32>())) | |
31 | } | |
32 | ||
33 | #[derive(Debug, PartialEq)] | |
34 | enum Error { | |
35 | Int, | |
36 | Float, | |
37 | } | |
38 | ||
39 | impl From<ParseIntError> for Error { | |
40 | fn from(_: ParseIntError) -> Error { | |
41 | Error::Int | |
42 | } | |
43 | } | |
44 | ||
45 | impl From<ParseFloatError> for Error { | |
46 | fn from(_: ParseFloatError) -> Error { | |
47 | Error::Float | |
48 | } | |
49 | } |