bytesbuf/bytes_compat/
view.rs

1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4use std::io::IoSlice;
5
6use bytes::Buf;
7
8use crate::BytesView;
9
10impl Buf for BytesView {
11    #[cfg_attr(test, mutants::skip)] // Trivial forwarder.
12    fn remaining(&self) -> usize {
13        self.len()
14    }
15
16    #[cfg_attr(test, mutants::skip)] // Trivial forwarder.
17    fn chunk(&self) -> &[u8] {
18        self.first_slice()
19    }
20
21    #[cfg_attr(test, mutants::skip)] // Trivial forwarder.
22    fn chunks_vectored<'a>(&'a self, dst: &mut [IoSlice<'a>]) -> usize {
23        self.io_slices(dst)
24    }
25
26    #[cfg_attr(test, mutants::skip)] // Trivial forwarder.
27    fn advance(&mut self, cnt: usize) {
28        self.advance(cnt);
29    }
30}
31
32#[cfg_attr(coverage_nightly, coverage(off))]
33#[cfg(test)]
34mod tests {
35    use new_zealand::nz;
36
37    use super::*;
38    use crate::mem::testing::FixedBlockMemory;
39
40    #[test]
41    fn buf_compat() {
42        let memory = FixedBlockMemory::new(nz!(25));
43
44        // 25 x 4
45        let mut buf = memory.reserve(100);
46        buf.put_byte_repeated(0x44, 100);
47
48        let mut bytes = buf.consume_all();
49
50        assert_eq!(Buf::remaining(&bytes), 100);
51
52        let chunk = Buf::chunk(&bytes);
53        assert_eq!(chunk.len(), 25);
54        assert_eq!(chunk, &[0x44; 25]);
55
56        Buf::advance(&mut bytes, 20);
57
58        let chunk = Buf::chunk(&bytes);
59        assert_eq!(chunk.len(), 5);
60        assert_eq!(chunk, &[0x44; 5]);
61
62        Buf::advance(&mut bytes, 5);
63
64        let chunk = Buf::chunk(&bytes);
65        assert_eq!(chunk.len(), 25);
66        assert_eq!(chunk, &[0x44; 25]);
67
68        Buf::advance(&mut bytes, 5);
69
70        let mut io_slices = [IoSlice::new(&[]); 4];
71        let n = Buf::chunks_vectored(&bytes, &mut io_slices);
72
73        // We have already advanced past the first 30 bytes
74        // but the remaining 70 should still be here for us as 20 + 25 + 25.
75        assert_eq!(n, 3);
76
77        assert_eq!(&*io_slices[0], &[0x44; 20]);
78        assert_eq!(&*io_slices[1], &[0x44; 25]);
79        assert_eq!(&*io_slices[2], &[0x44; 25]);
80    }
81}