indenter

Display trait indentation helper for errors

Latest version: 0.3.4 registry icon
Maintenance score
5
Safety score
100
Popularity score
9
Check your open source dependency risks. Get immediate insight about security, stability and licensing risks.
Security
  Vulnerabilities
Version Suggest Low Medium High Critical
0.3.4 0 0 0 0 0
0.3.3 0 0 0 0 0
0.3.2 0 0 0 0 0
0.3.1 0 0 0 0 0
0.3.0 0 0 0 0 0
0.2.0 0 0 0 0 0
0.1.3 0 0 0 0 0
0.1.1 0 0 0 0 0
0.1.0 0 0 0 0 0

Stability
Latest release:

0.3.4 - This version may not be safe as it has not been updated for a long time. Find out if your coding project uses this component and get notified of any reported security vulnerabilities with Meterian-X Open Source Security Platform

Licensing

Maintain your licence declarations and avoid unwanted licences to protect your IP the way you intended.

MIT   -   MIT License

Not a wildcard

Not proprietary

OSI Compliant


Apache-2.0   -   Apache License 2.0

Not a wildcard

Not proprietary

OSI Compliant



indenter

Build Status Latest Version Rust Documentation

A few wrappers for the fmt::Write objects that efficiently appends and remove common indentation after every newline

Setup

Add this to your Cargo.toml:

[dependencies]
indenter = "0.2"

Examples

Indentation only

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(())
    }
}

"Dedenting" (removing common leading indendation)

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");

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.