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.
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.
11 //! The `FromStr` trait for types that can be created from strings
15 use option::{Option, Some, None};
18 /// A trait to abstract the idea of creating a new instance of a type from a
20 #[experimental = "might need to return Result"]
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>;
27 /// A utility function that just calls FromStr::from_str
28 pub fn from_str<A: FromStr>(s: &str) -> Option<A> {
32 impl FromStr for bool {
33 /// Parse a `bool` from a string.
35 /// Yields an `Option<bool>`, because `s` may or may not actually be parseable.
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);
45 fn from_str(s: &str) -> Option<bool> {
48 "false" => Some(false),
54 impl FromStr for String {
56 fn from_str(s: &str) -> Option<String> {
57 Some(String::from_str(s))
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);