convert to using Cow
This commit is contained in:
21
src/http.rs
21
src/http.rs
@@ -1,9 +1,10 @@
|
||||
//! Pieces pertaining to the HTTP message protocol.
|
||||
use std::borrow::{Borrowed, Owned};
|
||||
use std::cmp::min;
|
||||
use std::fmt;
|
||||
use std::io::{mod, Reader, IoResult, BufWriter};
|
||||
use std::num::from_u16;
|
||||
use std::str::{mod, SendStr, Slice, Owned};
|
||||
use std::str::{mod, SendStr};
|
||||
|
||||
use url::Url;
|
||||
|
||||
@@ -559,9 +560,15 @@ pub fn read_request_line<R: Reader>(stream: &mut R) -> HttpResult<RequestLine> {
|
||||
pub type StatusLine = (HttpVersion, RawStatus);
|
||||
|
||||
/// The raw status code and reason-phrase.
|
||||
#[deriving(PartialEq, Show, Clone)]
|
||||
#[deriving(PartialEq, Show)]
|
||||
pub struct RawStatus(pub u16, pub SendStr);
|
||||
|
||||
impl Clone for RawStatus {
|
||||
fn clone(&self) -> RawStatus {
|
||||
RawStatus(self.0, (*self.1).clone().into_cow())
|
||||
}
|
||||
}
|
||||
|
||||
/// Read the StatusLine, such as `HTTP/1.1 200 OK`.
|
||||
///
|
||||
/// > The first line of a response message is the status-line, consisting
|
||||
@@ -632,7 +639,7 @@ pub fn read_status<R: Reader>(stream: &mut R) -> HttpResult<RawStatus> {
|
||||
Some(status) => match status.canonical_reason() {
|
||||
Some(phrase) => {
|
||||
if phrase == reason {
|
||||
Slice(phrase)
|
||||
Borrowed(phrase)
|
||||
} else {
|
||||
Owned(reason.into_string())
|
||||
}
|
||||
@@ -657,7 +664,7 @@ fn expect(r: IoResult<u8>, expected: u8) -> HttpResult<()> {
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::io::{mod, MemReader, MemWriter};
|
||||
use std::str::{Slice, Owned};
|
||||
use std::borrow::{Borrowed, Owned};
|
||||
use test::Bencher;
|
||||
use uri::RequestUri;
|
||||
use uri::RequestUri::{Star, AbsoluteUri, AbsolutePath, Authority};
|
||||
@@ -727,8 +734,8 @@ mod tests {
|
||||
assert_eq!(read_status(&mut mem(s)), result);
|
||||
}
|
||||
|
||||
read("200 OK\r\n", Ok(RawStatus(200, Slice("OK"))));
|
||||
read("404 Not Found\r\n", Ok(RawStatus(404, Slice("Not Found"))));
|
||||
read("200 OK\r\n", Ok(RawStatus(200, Borrowed("OK"))));
|
||||
read("404 Not Found\r\n", Ok(RawStatus(404, Borrowed("Not Found"))));
|
||||
read("200 crazy pants\r\n", Ok(RawStatus(200, Owned("crazy pants".to_string()))));
|
||||
}
|
||||
|
||||
@@ -774,7 +781,7 @@ mod tests {
|
||||
#[bench]
|
||||
fn bench_read_status(b: &mut Bencher) {
|
||||
b.bytes = b"404 Not Found\r\n".len() as u64;
|
||||
b.iter(|| assert_eq!(read_status(&mut mem("404 Not Found\r\n")), Ok(RawStatus(404, Slice("Not Found")))));
|
||||
b.iter(|| assert_eq!(read_status(&mut mem("404 Not Found\r\n")), Ok(RawStatus(404, Borrowed("Not Found")))));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user