indenter
A wrapper for the fmt::Write
objects that efficiently appends indentation
after every newline.
This type is intended primarily for writing error reporters that gracefully
format error messages that span multiple lines.
Setup
Add this to your Cargo.toml
:
[dependencies]
indenter = "0.2"
Example
use std::error::Error;
use std::fmt::{self, Write};
use indenter::indented;
struct ErrorReporter<'a>(&'a dyn Error);
impl fmt::Debug for ErrorReporter<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let mut source = Some(self.0);
let mut i = 0;
while let Some(error) = source {
writeln!(f)?;
write!(indented(f).ind(i), "{}", error)?;
source = error.source();
i += 1;
}
Ok(())
}
}
License