Change str::from_utf8_owned() to return Result
This allows the original vector to be recovered in the event that it is not valid UTF-8. [breaking-change]
This commit is contained in:
parent
e4414739a5
commit
d0f3cb05df
@ -60,7 +60,7 @@ To return an Owned String (~str) use the str helper function [`from_utf8_owned`]
|
|||||||
~~~
|
~~~
|
||||||
use std::str;
|
use std::str;
|
||||||
|
|
||||||
let x: Option<~str> = str::from_utf8_owned(~[104u8,105u8]);
|
let x: Result<~str,~[u8]> = str::from_utf8_owned(~[104u8,105u8]);
|
||||||
let y: ~str = x.unwrap();
|
let y: ~str = x.unwrap();
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
@ -87,6 +87,7 @@ use iter::{Iterator, range, AdditiveIterator};
|
|||||||
use mem::transmute;
|
use mem::transmute;
|
||||||
use mem;
|
use mem;
|
||||||
use option::{None, Option, Some};
|
use option::{None, Option, Some};
|
||||||
|
use result::{Result, Ok, Err};
|
||||||
use slice::Vector;
|
use slice::Vector;
|
||||||
use slice::{ImmutableVector, MutableVector, CloneableVector};
|
use slice::{ImmutableVector, MutableVector, CloneableVector};
|
||||||
use strbuf::StrBuf;
|
use strbuf::StrBuf;
|
||||||
@ -105,12 +106,14 @@ Section: Creating a string
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/// Consumes a vector of bytes to create a new utf-8 string.
|
/// Consumes a vector of bytes to create a new utf-8 string.
|
||||||
/// Returns None if the vector contains invalid UTF-8.
|
///
|
||||||
pub fn from_utf8_owned(vv: ~[u8]) -> Option<~str> {
|
/// Returns `Err` with the original vector if the vector contains invalid
|
||||||
|
/// UTF-8.
|
||||||
|
pub fn from_utf8_owned(vv: ~[u8]) -> Result<~str, ~[u8]> {
|
||||||
if is_utf8(vv) {
|
if is_utf8(vv) {
|
||||||
Some(unsafe { raw::from_utf8_owned(vv) })
|
Ok(unsafe { raw::from_utf8_owned(vv) })
|
||||||
} else {
|
} else {
|
||||||
None
|
Err(vv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2115,13 +2118,13 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn test_str_from_utf8_owned() {
|
fn test_str_from_utf8_owned() {
|
||||||
let xs = bytes!("hello").to_owned();
|
let xs = bytes!("hello").to_owned();
|
||||||
assert_eq!(from_utf8_owned(xs), Some("hello".to_owned()));
|
assert_eq!(from_utf8_owned(xs), Ok("hello".to_owned()));
|
||||||
|
|
||||||
let xs = bytes!("ศไทย中华Việt Nam").to_owned();
|
let xs = bytes!("ศไทย中华Việt Nam").to_owned();
|
||||||
assert_eq!(from_utf8_owned(xs), Some("ศไทย中华Việt Nam".to_owned()));
|
assert_eq!(from_utf8_owned(xs), Ok("ศไทย中华Việt Nam".to_owned()));
|
||||||
|
|
||||||
let xs = bytes!("hello", 0xff).to_owned();
|
let xs = bytes!("hello", 0xff).to_owned();
|
||||||
assert_eq!(from_utf8_owned(xs), None);
|
assert_eq!(from_utf8_owned(xs), Err(bytes!("hello", 0xff).to_owned()));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
Loading…
Reference in New Issue
Block a user