2019-03-06 20:46:42 +01:00
|
|
|
use std::collections::VecDeque;
|
|
|
|
|
|
|
|
|
|
use super::Buf;
|
|
|
|
|
|
|
|
|
|
impl Buf for VecDeque<u8> {
|
|
|
|
|
fn remaining(&self) -> usize {
|
|
|
|
|
self.len()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn bytes(&self) -> &[u8] {
|
|
|
|
|
let (s1, s2) = self.as_slices();
|
|
|
|
|
if s1.is_empty() {
|
|
|
|
|
s2
|
|
|
|
|
} else {
|
|
|
|
|
s1
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fn advance(&mut self, cnt: usize) {
|
|
|
|
|
self.drain(..cnt);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
|
mod tests {
|
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
fn hello_world() {
|
|
|
|
|
let mut buffer: VecDeque<u8> = VecDeque::new();
|
|
|
|
|
buffer.extend(b"hello world");
|
|
|
|
|
assert_eq!(11, buffer.remaining());
|
|
|
|
|
assert_eq!(b"hello world", buffer.bytes());
|
|
|
|
|
buffer.advance(6);
|
|
|
|
|
assert_eq!(b"world", buffer.bytes());
|
|
|
|
|
buffer.extend(b" piece");
|
2019-08-27 22:09:43 +02:00
|
|
|
let mut out = [0; 11];
|
|
|
|
|
buffer.copy_to_slice(&mut out);
|
|
|
|
|
assert_eq!(b"world piece", &out[..]);
|
2019-03-06 20:46:42 +01:00
|
|
|
}
|
|
|
|
|
}
|