A few wrappers for the fmt::Write
objects that efficiently appends and remove common indentation after every newline
Add this to your Cargo.toml
:
[dependencies] indenter = "0.2"
This type is intended primarily for writing error reporters that gracefully format error messages that span multiple lines.
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(()) } }
This type is intended primarily for formatting source code. For example, when generating code.
This type requires the feature std
.
use std::error::Error; use core::fmt::{self, Write}; use indenter::CodeFormatter; let mut output = String::new(); let mut f = CodeFormatter::new(&mut output, " "); write!( f, r#" Hello World "#, ); assert_eq!(output, "Hello\n World\n"); let mut output = String::new(); let mut f = CodeFormatter::new(&mut output, " "); // it can also indent... f.indent(2); write!( f, r#" Hello World "#, ); assert_eq!(output, " Hello\n World\n");