@@ -87,6 +87,7 @@ use iter::{Iterator, range, AdditiveIterator};
8787use mem:: transmute;
8888use mem;
8989use option:: { None , Option , Some } ;
90+ use result:: { Result , Ok , Err } ;
9091use slice:: Vector ;
9192use slice:: { ImmutableVector , MutableVector , CloneableVector } ;
9293use strbuf:: StrBuf ;
@@ -105,12 +106,14 @@ Section: Creating a string
105106*/
106107
107108/// Consumes a vector of bytes to create a new utf-8 string.
108- /// Returns None if the vector contains invalid UTF-8.
109- pub fn from_utf8_owned ( vv : ~[ u8 ] ) -> Option < ~str > {
109+ ///
110+ /// Returns `Err` with the original vector if the vector contains invalid
111+ /// UTF-8.
112+ pub fn from_utf8_owned ( vv : ~[ u8 ] ) -> Result < ~str , ~[ u8 ] > {
110113 if is_utf8 ( vv) {
111- Some ( unsafe { raw:: from_utf8_owned ( vv) } )
114+ Ok ( unsafe { raw:: from_utf8_owned ( vv) } )
112115 } else {
113- None
116+ Err ( vv )
114117 }
115118}
116119
@@ -2120,13 +2123,13 @@ mod tests {
21202123 #[ test]
21212124 fn test_str_from_utf8_owned ( ) {
21222125 let xs = bytes ! ( "hello" ) . to_owned ( ) ;
2123- assert_eq ! ( from_utf8_owned( xs) , Some ( "hello" . to_owned( ) ) ) ;
2126+ assert_eq ! ( from_utf8_owned( xs) , Ok ( "hello" . to_owned( ) ) ) ;
21242127
21252128 let xs = bytes ! ( "ศไทย中华Việt Nam" ) . to_owned ( ) ;
2126- assert_eq ! ( from_utf8_owned( xs) , Some ( "ศไทย中华Việt Nam" . to_owned( ) ) ) ;
2129+ assert_eq ! ( from_utf8_owned( xs) , Ok ( "ศไทย中华Việt Nam" . to_owned( ) ) ) ;
21272130
21282131 let xs = bytes ! ( "hello" , 0xff ) . to_owned ( ) ;
2129- assert_eq ! ( from_utf8_owned( xs) , None ) ;
2132+ assert_eq ! ( from_utf8_owned( xs) , Err ( bytes! ( "hello" , 0xff ) . to_owned ( ) ) ) ;
21302133 }
21312134
21322135 #[ test]
0 commit comments