use core::fmt;
use crate::{
common::{IndentWrite, IndentWriterCommon, IndentWriterImpl},
marker::{self},
};
impl<W: fmt::Write> IndentWrite<marker::Format> for W {
type Error = fmt::Error;
#[inline]
fn write_char(&mut self, c: char) -> Result<(), Self::Error> {
<Self as fmt::Write>::write_char(self, c)
}
#[inline]
fn write_str(&mut self, str: &str) -> Result<(), Self::Error> {
<Self as fmt::Write>::write_str(self, str)
}
#[inline]
fn flush(&mut self) -> Result<(), Self::Error> {
Ok(())
}
}
pub struct IndentWriter<'fmt, W: fmt::Write> {
inner: IndentWriterImpl<'fmt, marker::Format, W>,
}
impl<'fmt, W: fmt::Write> IndentWriter<'fmt, W> {
pub fn new(w: &'fmt mut W, indent: usize) -> Self {
Self {
inner: IndentWriterImpl::new(w, indent),
}
}
}
impl<W: fmt::Write> IndentWriterCommon for IndentWriter<'_, W> {
fn increase_indent(&mut self) {
self.inner.increase_indent();
}
fn decrease_indent(&mut self) {
self.inner.decrease_indent();
}
fn indent_if_needed(&mut self) {
let _ = self.inner.indent_if_needed();
}
}
impl<W: fmt::Write> fmt::Write for IndentWriter<'_, W> {
fn write_str(&mut self, s: &str) -> fmt::Result {
self.inner.write_str(s)
}
}
pub type IndentFormatter<'fmt, 'buffer> =
IndentWriter<'fmt, fmt::Formatter<'buffer>>;