diff --git a/src/http/buf.rs b/src/http/buf.rs index 6e21bcd3..295f7a5f 100644 --- a/src/http/buf.rs +++ b/src/http/buf.rs @@ -176,6 +176,18 @@ impl fmt::Debug for MemBuf { } } +impl From> for MemBuf { + fn from(mut vec: Vec) -> MemBuf { + let end = vec.iter().find(|&&x| x == 0).map(|&x| x as usize).unwrap_or(vec.len()); + vec.shrink_to_fit(); + MemBuf { + buf: Arc::new(UnsafeCell::new(vec)), + start: 0, + end: end, + } + } +} + pub struct MemSlice { buf: Arc>>, start: usize, @@ -284,8 +296,7 @@ mod tests { #[test] fn test_mem_slice_slice() { - let mut buf = MemBuf::with_capacity(32); - buf.read_from(&mut &b"Hello World"[..]).unwrap(); + let mut buf = MemBuf::from(b"Hello World".to_vec()); let len = buf.len(); let full = buf.slice(len);