diff --git a/src/framed.rs b/src/framed.rs index f4ad2ae..502b584 100644 --- a/src/framed.rs +++ b/src/framed.rs @@ -64,16 +64,16 @@ impl tokio_core::io::Codec for Codec match self.state { Id if buf.len() < mem::size_of::() => return Ok(None), Id => { - self.state = Len { id: Cursor::new(&*buf.get_mut()).read_u64::()? }; - *buf = buf.split_off(mem::size_of::()); + let id_buf = buf.drain_to(mem::size_of::()); + self.state = Len { id: Cursor::new(id_buf).read_u64::()? }; } Len { .. } if buf.len() < mem::size_of::() => return Ok(None), Len { id } => { + let len_buf = buf.drain_to(mem::size_of::()); self.state = Payload { id: id, - len: Cursor::new(&*buf.get_mut()).read_u64::()?, + len: Cursor::new(len_buf).read_u64::()?, }; - *buf = buf.split_off(mem::size_of::()); } Payload { len, .. } if buf.len() < len as usize => return Ok(None), Payload { id, .. } => {