Indented Documents (indoc)
This crate provides a procedural macro for indented string literals. The
indoc!() macro takes a multiline string literal and un-indents it at compile
time so the leftmost non-space character is in the first column.
 = "1.0"
Compiler requirement: rustc 1.42 or greater.
Indoc also works with raw string literals:
And byte string literals:
The indoc crate exports four additional macros to substitute conveniently for the standard library's formatting macros:
formatdoc!($fmt, ...)— equivalent to
printdoc!($fmt, ...)— equivalent to
eprintdoc!($fmt, ...)— equivalent to
writedoc!($dest, $fmt, ...)— equivalent to
write!($dest, indoc!($fmt), ...)
The following rules characterize the behavior of the
- Count the leading spaces of each line, ignoring the first line and any lines that are empty or contain spaces only.
- Take the minimum.
- If the first line is empty i.e. the string begins with a newline, remove the first line.
- Remove the computed number of spaces from the beginning of each line.
Indoc's indentation logic is available in the
unindent crate. This may be
useful for processing strings that are not statically known at compile time.
The crate exposes two functions:
unindent(&str) -> String
unindent_bytes(&[u8]) -> Vec<u8>