diff --git a/src/request.rs b/src/request.rs index 875f37b..f825cf1 100644 --- a/src/request.rs +++ b/src/request.rs @@ -1,6 +1,8 @@ use qstring::QString; use serde_json; use std::sync::Arc; +use std::io::Cursor; +use std::io::empty; lazy_static! { static ref URL_BASE: Url = { Url::parse("http://localhost/").expect("Failed to parse URL_BASE") }; @@ -39,15 +41,18 @@ impl Default for Payload { impl Payload { fn into_read(self) -> (Option, Box) { match self { - Payload::Empty => (Some(0), Box::new(VecRead::from_str(""))), + Payload::Empty => (Some(0), Box::new(empty())), Payload::Text(s) => { - let read = VecRead::from_str(&s); - (Some(read.len()), Box::new(read)) + let bytes = s.into_bytes(); + let len = bytes.len(); + let cursor = Cursor::new(bytes); + (Some(len), Box::new(cursor)) } Payload::JSON(v) => { - let vec = serde_json::to_vec(&v).expect("Bad JSON in payload"); - let read = VecRead::from_vec(vec); - (Some(read.len()), Box::new(read)) + let bytes = serde_json::to_vec(&v).expect("Bad JSON in payload"); + let len = bytes.len(); + let cursor = Cursor::new(bytes); + (Some(len), Box::new(cursor)) } Payload::Reader(read) => (None, read), } diff --git a/src/response.rs b/src/response.rs index ef0b487..0a4c82d 100644 --- a/src/response.rs +++ b/src/response.rs @@ -246,9 +246,10 @@ fn parse_status_line(line: &str) -> Result<((usize, usize), u16), Error> { impl FromStr for Response { type Err = Error; fn from_str(s: &str) -> Result { - let mut read = VecRead::from_str(s); - let mut resp = Self::do_from_read(&mut read)?; - resp.set_stream(Stream::Read(Box::new(read))); + let bytes = s.as_bytes().to_owned(); + let mut cursor = Cursor::new(bytes); + let mut resp = Self::do_from_read(&mut cursor)?; + resp.set_stream(Stream::Read(Box::new(cursor))); Ok(resp) } } diff --git a/src/test/mod.rs b/src/test/mod.rs index ce78344..d38a759 100644 --- a/src/test/mod.rs +++ b/src/test/mod.rs @@ -6,7 +6,7 @@ use std::collections::HashMap; use std::io::Write; use std::sync::{Arc, Mutex}; use url::Url; -use util::vecread::VecRead; +use std::io::Cursor; mod agent_test; mod auth; @@ -42,9 +42,9 @@ pub fn make_response( } write!(&mut buf, "\r\n").ok(); buf.append(&mut body); - let read = VecRead::from_vec(buf); + let cursor = Cursor::new(buf); let write: Vec = vec![]; - Ok(Stream::Test(Box::new(read), write)) + Ok(Stream::Test(Box::new(cursor), write)) } pub fn resolve_handler(req: &Request, url: &Url) -> Result { diff --git a/src/util/vecread.rs b/src/util/vecread.rs deleted file mode 100644 index 1cc8def..0000000 --- a/src/util/vecread.rs +++ /dev/null @@ -1,34 +0,0 @@ -use std::io::Read; -use std::io::Result; - -pub struct VecRead { - bytes: Vec, - index: usize, -} - -impl VecRead { - pub fn new(bytes: &[u8]) -> Self { - Self::from_vec(bytes.to_owned()) - } - pub fn from_vec(bytes: Vec) -> Self { - VecRead { - bytes, - index: 0, - } - } - pub fn from_str(s: &str) -> Self { - Self::new(s.as_bytes()) - } - pub fn len(&self) -> usize { - self.bytes.len() - } -} - -impl Read for VecRead { - fn read(&mut self, buf: &mut [u8]) -> Result { - let len = buf.len().min(self.bytes.len() - self.index); - (&mut buf[0..len]).copy_from_slice(&self.bytes[self.index..self.index + len]); - self.index += len; - Ok(len) - } -}