Skip to main content

ax_io/utils/
sink.rs

1use core::fmt;
2
3use crate::{IoBufMut, Result, Write};
4
5/// A writer which will move data into the void.
6///
7/// This struct is generally created by calling [`sink()`]. Please
8/// see the documentation of [`sink()`] for more details.
9#[non_exhaustive]
10#[derive(Copy, Clone, Debug, Default)]
11pub struct Sink;
12
13/// Creates an instance of a writer which will successfully consume all data.
14#[must_use]
15pub const fn sink() -> Sink {
16    Sink
17}
18
19impl Write for Sink {
20    #[inline]
21    fn write(&mut self, buf: &[u8]) -> Result<usize> {
22        Ok(buf.len())
23    }
24
25    #[inline]
26    fn write_all(&mut self, _buf: &[u8]) -> Result<()> {
27        Ok(())
28    }
29
30    #[inline]
31    fn write_fmt(&mut self, _args: fmt::Arguments<'_>) -> Result<()> {
32        Ok(())
33    }
34
35    #[inline]
36    fn flush(&mut self) -> Result<()> {
37        Ok(())
38    }
39}
40
41impl Write for &Sink {
42    #[inline]
43    fn write(&mut self, buf: &[u8]) -> Result<usize> {
44        Ok(buf.len())
45    }
46
47    #[inline]
48    fn write_all(&mut self, _buf: &[u8]) -> Result<()> {
49        Ok(())
50    }
51
52    #[inline]
53    fn write_fmt(&mut self, _args: fmt::Arguments<'_>) -> Result<()> {
54        Ok(())
55    }
56
57    #[inline]
58    fn flush(&mut self) -> Result<()> {
59        Ok(())
60    }
61}
62
63impl IoBufMut for Sink {
64    fn remaining_mut(&self) -> usize {
65        usize::MAX
66    }
67}