]> git.lizzy.rs Git - rust.git/blob - src/libstd/from_str.rs
Fixed tidy errors
[rust.git] / src / libstd / from_str.rs
1 // Copyright 2012 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
4 //
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
10
11 //! The `FromStr` trait for types that can be created from strings
12
13 #![experimental]
14
15 use option::{Option, Some, None};
16 use string::String;
17
18 /// A trait to abstract the idea of creating a new instance of a type from a
19 /// string.
20 #[experimental = "might need to return Result"]
21 pub trait FromStr {
22     /// Parses a string `s` to return an optional value of this type. If the
23     /// string is ill-formatted, the None is returned.
24     fn from_str(s: &str) -> Option<Self>;
25 }
26
27 /// A utility function that just calls FromStr::from_str
28 pub fn from_str<A: FromStr>(s: &str) -> Option<A> {
29     FromStr::from_str(s)
30 }
31
32 impl FromStr for bool {
33     /// Parse a `bool` from a string.
34     ///
35     /// Yields an `Option<bool>`, because `s` may or may not actually be parseable.
36     ///
37     /// # Examples
38     ///
39     /// ```rust
40     /// assert_eq!(from_str::<bool>("true"), Some(true));
41     /// assert_eq!(from_str::<bool>("false"), Some(false));
42     /// assert_eq!(from_str::<bool>("not even a boolean"), None);
43     /// ```
44     #[inline]
45     fn from_str(s: &str) -> Option<bool> {
46         match s {
47             "true"  => Some(true),
48             "false" => Some(false),
49             _       => None,
50         }
51     }
52 }
53
54 impl FromStr for String {
55     #[inline]
56     fn from_str(s: &str) -> Option<String> {
57         Some(String::from_str(s))
58     }
59 }
60
61 #[cfg(test)]
62 mod test {
63     use prelude::*;
64
65     #[test]
66     fn test_bool_from_str() {
67         assert_eq!(from_str::<bool>("true"), Some(true));
68         assert_eq!(from_str::<bool>("false"), Some(false));
69         assert_eq!(from_str::<bool>("not even a boolean"), None);
70     }
71 }