use std::fmt::{self, Display, Write};
pub mod help;
#[allow(missing_debug_implementations)]
pub struct Section<H, B> {
header: H,
body: B,
}
pub trait SectionExt: Sized {
fn header<C>(self, header: C) -> Section<C, Self>
where
C: Display + Send + Sync + 'static;
}
impl<T> SectionExt for T
where
T: Display + Send + Sync + 'static,
{
fn header<C>(self, header: C) -> Section<C, Self>
where
C: Display + Send + Sync + 'static,
{
Section { body: self, header }
}
}
impl<H, B> fmt::Display for Section<H, B>
where
H: Display + Send + Sync + 'static,
B: Display + Send + Sync + 'static,
{
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let mut headered = crate::writers::HeaderWriter {
inner: f,
header: &self.header,
started: false,
};
let mut headered = crate::writers::HeaderWriter {
inner: headered.ready(),
header: &"\n",
started: false,
};
let mut headered = headered.ready();
let mut indented = indenter::indented(&mut headered)
.with_format(indenter::Format::Uniform { indentation: " " });
write!(&mut indented, "{}", self.body)?;
Ok(())
}
}