mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
Auto merge of #9684 - danlrobertson:i9655, r=KiChjang
Add methods to move ByteStrings underlying bytes Add methods to move the underlying `Vec<u8>` for `ByteString`. I saw this as at least two methods. One to "move and replace with and empty Vec<u8> (`bytes`), and one to take ownership of the whole object (`own_bytes`). I typically also don't like adding methods with out unit tests. If you think they're unnecessary, just let me know. As always, please let me know if you have any comments, critiques, or nits! Fixes #9655 <!-- Reviewable:start --> [<img src="https://reviewable.io/review_button.svg" height="40" alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/9684) <!-- Reviewable:end -->
This commit is contained in:
commit
aae6525f7d
4 changed files with 36 additions and 9 deletions
|
@ -7,6 +7,7 @@
|
|||
use std::ascii::AsciiExt;
|
||||
use std::borrow::ToOwned;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::mem;
|
||||
use std::ops;
|
||||
use std::str;
|
||||
use std::str::FromStr;
|
||||
|
@ -24,14 +25,18 @@ impl ByteString {
|
|||
/// Returns `self` as a string, if it encodes valid UTF-8, and `None`
|
||||
/// otherwise.
|
||||
pub fn as_str(&self) -> Option<&str> {
|
||||
let ByteString(ref vec) = *self;
|
||||
str::from_utf8(&vec).ok()
|
||||
str::from_utf8(&self.0).ok()
|
||||
}
|
||||
|
||||
/// Returns ownership of the underlying Vec<u8> and copies an empty
|
||||
/// vec in its place
|
||||
pub fn bytes(&mut self) -> Vec<u8> {
|
||||
mem::replace(&mut self.0, Vec::new())
|
||||
}
|
||||
|
||||
/// Returns the length.
|
||||
pub fn len(&self) -> usize {
|
||||
let ByteString(ref vector) = *self;
|
||||
vector.len()
|
||||
self.0.len()
|
||||
}
|
||||
|
||||
/// Compare `self` to `other`, matching A–Z and a–z as equal.
|
||||
|
@ -47,8 +52,7 @@ impl ByteString {
|
|||
/// Returns whether `self` is a `token`, as defined by
|
||||
/// [RFC 2616](http://tools.ietf.org/html/rfc2616#page-17).
|
||||
pub fn is_token(&self) -> bool {
|
||||
let ByteString(ref vec) = *self;
|
||||
is_token(vec)
|
||||
is_token(&self.0)
|
||||
}
|
||||
|
||||
/// Returns whether `self` is a `field-value`, as defined by
|
||||
|
@ -62,9 +66,8 @@ impl ByteString {
|
|||
LF,
|
||||
SPHT, // SP or HT
|
||||
}
|
||||
let ByteString(ref vec) = *self;
|
||||
let mut prev = PreviousCharacter::Other; // The previous character
|
||||
vec.iter().all(|&x| {
|
||||
self.0.iter().all(|&x| {
|
||||
// http://tools.ietf.org/html/rfc2616#section-2.2
|
||||
match x {
|
||||
13 => { // CR
|
||||
|
@ -117,6 +120,12 @@ impl ByteString {
|
|||
}
|
||||
}
|
||||
|
||||
impl Into<Vec<u8>> for ByteString {
|
||||
fn into(self) -> Vec<u8> {
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl Hash for ByteString {
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
let ByteString(ref vec) = *self;
|
||||
|
|
|
@ -456,7 +456,7 @@ impl XMLHttpRequestMethods for XMLHttpRequest {
|
|||
None => {}
|
||||
}
|
||||
|
||||
headers.set_raw(name_str.to_owned(), vec![value.to_vec()]);
|
||||
headers.set_raw(name_str.to_owned(), vec![value.into()]);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue