(index<- ) ./libstd/from_str.rs
git branch: * master 5200215 auto merge of #14035 : alexcrichton/rust/experimental, r=huonw
modified: Fri May 9 13:02:28 2014
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 use option::{Option, Some, None};
14
15 /// A trait to abstract the idea of creating a new instance of a type from a
16 /// string.
17 pub trait FromStr {
18 /// Parses a string `s` to return an optional value of this type. If the
19 /// string is ill-formatted, the None is returned.
20 fn from_str(s: &str) -> Option<Self>;
21 }
22
23 /// A utility function that just calls FromStr::from_str
24 pub fn from_str<A: FromStr>(s: &str) -> Option<A> {
25 FromStr::from_str(s)
26 }
27
28 impl FromStr for bool {
29 /// Parse a `bool` from a string.
30 ///
31 /// Yields an `Option<bool>`, because `s` may or may not actually be parseable.
32 ///
33 /// # Examples
34 ///
35 /// ```rust
36 /// assert_eq!(from_str::<bool>("true"), Some(true));
37 /// assert_eq!(from_str::<bool>("false"), Some(false));
38 /// assert_eq!(from_str::<bool>("not even a boolean"), None);
39 /// ```
40 #[inline]
41 fn from_str(s: &str) -> Option<bool> {
42 match s {
43 "true" => Some(true),
44 "false" => Some(false),
45 _ => None,
46 }
47 }
48 }
49
50 #[cfg(test)]
51 mod test {
52 use prelude::*;
53
54 #[test]
55 fn test_bool_from_str() {
56 assert_eq!(from_str::<bool>("true"), Some(true));
57 assert_eq!(from_str::<bool>("false"), Some(false));
58 assert_eq!(from_str::<bool>("not even a boolean"), None);
59 }
60 }