ax_io/buffered/linewriter/
mod.rs1mod shim;
2
3use core::fmt;
4
5use self::shim::LineWriterShim;
6use crate::{BufWriter, IntoInnerError, IoBufMut, Result, Write};
7pub struct LineWriter<W: ?Sized + Write> {
21 inner: BufWriter<W>,
22}
23
24impl<W: Write> LineWriter<W> {
25 pub fn new(inner: W) -> LineWriter<W> {
27 LineWriter {
28 inner: BufWriter::new(inner),
29 }
30 }
31
32 #[cfg(feature = "alloc")]
35 pub fn with_capacity(capacity: usize, inner: W) -> LineWriter<W> {
36 LineWriter {
37 inner: BufWriter::with_capacity(capacity, inner),
38 }
39 }
40
41 #[cfg_attr(not(feature = "alloc"), allow(clippy::result_large_err))]
49 pub fn into_inner(self) -> core::result::Result<W, IntoInnerError<LineWriter<W>>> {
50 self.inner
51 .into_inner()
52 .map_err(|err| err.new_wrapped(|inner| LineWriter { inner }))
53 }
54}
55
56impl<W: ?Sized + Write> LineWriter<W> {
57 pub fn get_ref(&self) -> &W {
59 self.inner.get_ref()
60 }
61
62 pub fn get_mut(&mut self) -> &mut W {
67 self.inner.get_mut()
68 }
69}
70
71impl<W: ?Sized + Write> Write for LineWriter<W> {
72 fn write(&mut self, buf: &[u8]) -> Result<usize> {
73 LineWriterShim::new(&mut self.inner).write(buf)
74 }
75
76 fn flush(&mut self) -> Result<()> {
77 self.inner.flush()
78 }
79
80 fn write_all(&mut self, buf: &[u8]) -> Result<()> {
81 LineWriterShim::new(&mut self.inner).write_all(buf)
82 }
83
84 fn write_fmt(&mut self, fmt: fmt::Arguments<'_>) -> Result<()> {
85 LineWriterShim::new(&mut self.inner).write_fmt(fmt)
86 }
87}
88
89impl<W: ?Sized + Write + fmt::Debug> fmt::Debug for LineWriter<W> {
90 fn fmt(&self, fmt: &mut fmt::Formatter<'_>) -> fmt::Result {
91 fmt.debug_struct("LineWriter")
92 .field("writer", &self.get_ref())
93 .field(
94 "buffer",
95 &format_args!("{}/{}", self.inner.buffer().len(), self.inner.capacity()),
96 )
97 .finish_non_exhaustive()
98 }
99}
100
101impl<W: ?Sized + Write + IoBufMut> IoBufMut for LineWriter<W> {
102 #[inline]
103 fn remaining_mut(&self) -> usize {
104 self.inner.remaining_mut()
105 }
106}