bytes/buf/
vec_deque.rs

1use alloc::collections::VecDeque;
2#[cfg(feature = "std")]
3use std::io;
4
5use super::Buf;
6
7impl Buf for VecDeque<u8> {
8    fn remaining(&self) -> usize {
9        self.len()
10    }
11
12    fn chunk(&self) -> &[u8] {
13        let (s1, s2) = self.as_slices();
14        if s1.is_empty() {
15            s2
16        } else {
17            s1
18        }
19    }
20
21    #[cfg(feature = "std")]
22    fn chunks_vectored<'a>(&'a self, dst: &mut [io::IoSlice<'a>]) -> usize {
23        if self.is_empty() || dst.is_empty() {
24            return 0;
25        }
26
27        let (s1, s2) = self.as_slices();
28        dst[0] = io::IoSlice::new(s1);
29        if s2.is_empty() || dst.len() == 1 {
30            return 1;
31        }
32
33        dst[1] = io::IoSlice::new(s2);
34        2
35    }
36
37    fn advance(&mut self, cnt: usize) {
38        self.drain(..cnt);
39    }
40}