1use core::fmt;
2
3use crate::{IoBufMut, Result, Write};
4
5#[non_exhaustive]
10#[derive(Copy, Clone, Debug, Default)]
11pub struct Sink;
12
13#[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}