diff --git a/src/array_string.rs b/src/array_string.rs index a39fbcc..4e78652 100644 --- a/src/array_string.rs +++ b/src/array_string.rs @@ -45,6 +45,24 @@ impl> ArrayString { } } + /// Create a new `ArrayString` from a string slice. + /// + /// Capacity is inferred from the type parameter. + /// + /// ``` + /// use arrayvec::ArrayString; + /// + /// let mut string = ArrayString::<[_; 3]>::from("foo").unwrap(); + /// assert_eq!(&string[..], "foo"); + /// assert_eq!(string.len(), 3); + /// assert_eq!(string.capacity(), 3); + /// ``` + pub fn from(s: &str) -> Result> { + let mut arraystr = Self::new(); + try!(arraystr.push_str(s)); + Ok(arraystr) + } + /// Return the capacity of the `ArrayString`. /// /// ``` diff --git a/tests/tests.rs b/tests/tests.rs index b0b256d..8aa1baa 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -288,7 +288,6 @@ fn test_string() { let tmut: &mut str = &mut t; assert_eq!(tmut, "ab"); - // Test Error trait / try let t = || -> Result<(), Box> { let mut t = ArrayString::<[_; 2]>::new(); @@ -296,4 +295,9 @@ fn test_string() { Ok(()) }(); assert!(t.is_err()); + + // Test `from` constructor + let u = ArrayString::<[_; 11]>::from(text).unwrap(); + assert_eq!(&u, text); + assert_eq!(u.len(), text.len()); }