s2n_quic_core/buffer/reader/
empty.rs1use crate::{
5 buffer::{
6 reader::{storage::Chunk, Reader, Storage},
7 writer,
8 },
9 varint::VarInt,
10};
11
12#[derive(Debug)]
14pub struct Empty<'a, R: Reader + ?Sized>(&'a R);
15
16impl<'a, R: Reader + ?Sized> Empty<'a, R> {
17 #[inline]
18 pub fn new(reader: &'a R) -> Self {
19 Self(reader)
20 }
21}
22
23impl<R: Reader + ?Sized> Storage for Empty<'_, R> {
24 type Error = core::convert::Infallible;
25
26 #[inline(always)]
27 fn buffered_len(&self) -> usize {
28 0
29 }
30
31 #[inline(always)]
32 fn read_chunk(&mut self, _watermark: usize) -> Result<Chunk<'_>, Self::Error> {
33 Ok(Chunk::empty())
34 }
35
36 #[inline(always)]
37 fn partial_copy_into<Dest>(&mut self, _dest: &mut Dest) -> Result<Chunk<'_>, Self::Error>
38 where
39 Dest: writer::Storage + ?Sized,
40 {
41 Ok(Chunk::empty())
42 }
43}
44
45impl<R: Reader + ?Sized> Reader for Empty<'_, R> {
46 #[inline]
47 fn current_offset(&self) -> VarInt {
48 self.0.current_offset()
49 }
50
51 #[inline]
52 fn final_offset(&self) -> Option<VarInt> {
53 self.0.final_offset()
54 }
55}
56
57#[cfg(test)]
58mod tests {
59 use super::*;
60 use crate::stream::testing::Data;
61
62 #[test]
63 fn empty_test() {
64 let mut reader = Data::new(1000);
65 assert_eq!(reader.buffered_len(), 1000);
66 let mut reader = reader.with_checks();
67
68 {
69 assert_eq!(reader.with_empty_buffer().buffered_len(), 0);
70 }
71
72 let mut dest = &mut [0u8; 16][..];
73 let chunk = reader.partial_copy_into(&mut dest).unwrap();
74 assert_eq!(chunk.len(), 16);
75
76 let mut reader = reader.with_empty_buffer();
77
78 assert_eq!(reader.buffered_len(), 0);
79 assert!(reader.buffer_is_empty());
80
81 let chunk = reader.partial_copy_into(&mut dest).unwrap();
82 assert_eq!(chunk.len(), 0);
83 }
84}