@@ -87,6 +87,7 @@ use iter::{Iterator, range, AdditiveIterator};
87
87
use mem:: transmute;
88
88
use mem;
89
89
use option:: { None , Option , Some } ;
90
+ use result:: { Result , Ok , Err } ;
90
91
use slice:: Vector ;
91
92
use slice:: { ImmutableVector , MutableVector , CloneableVector } ;
92
93
use strbuf:: StrBuf ;
@@ -105,12 +106,14 @@ Section: Creating a string
105
106
*/
106
107
107
108
/// 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 ] > {
110
113
if is_utf8 ( vv) {
111
- Some ( unsafe { raw:: from_utf8_owned ( vv) } )
114
+ Ok ( unsafe { raw:: from_utf8_owned ( vv) } )
112
115
} else {
113
- None
116
+ Err ( vv )
114
117
}
115
118
}
116
119
@@ -2120,13 +2123,13 @@ mod tests {
2120
2123
#[ test]
2121
2124
fn test_str_from_utf8_owned ( ) {
2122
2125
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( ) ) ) ;
2124
2127
2125
2128
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( ) ) ) ;
2127
2130
2128
2131
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 ( ) ) ) ;
2130
2133
}
2131
2134
2132
2135
#[ test]
0 commit comments