mfmt/
build.rs

1//! Document builders.
2
3mod builder;
4
5use super::{utility::is_broken, Document};
6pub use builder::Builder;
7
8/// Creates a sequence of documents.
9pub const fn sequence<'a>(documents: &'a [Document<'a>]) -> Document<'a> {
10    Document::Sequence(documents)
11}
12
13/// Creates a line suffix.
14pub const fn line_suffix(string: &str) -> Document {
15    Document::LineSuffix(string)
16}
17
18/// Flattens a document.
19pub const fn flatten<'a>(document: &'a Document<'a>) -> Document<'a> {
20    Document::Break {
21        broken: false,
22        document,
23    }
24}
25
26/// Breaks a document into multiple lines.
27pub const fn r#break<'a>(document: &'a Document<'a>) -> Document<'a> {
28    Document::Break {
29        broken: true,
30        document,
31    }
32}
33
34/// Flattens a document if a `condition` is true.
35pub fn flatten_if<'a>(condition: bool, document: &'a Document<'a>) -> Document<'a> {
36    Document::Break {
37        broken: !condition || is_broken(document),
38        document,
39    }
40}
41
42/// Indents a document.
43pub const fn indent<'a>(document: &'a Document<'a>) -> Document<'a> {
44    Document::Indent(document)
45}
46
47/// Creates a new line.
48pub const fn line() -> Document<'static> {
49    Document::Line
50}
51
52/// Creates an empty document.
53pub const fn empty() -> Document<'static> {
54    Document::String("")
55}
56
57/// Creates a document indented to a current column.
58pub const fn offside<'a>(document: &'a Document<'a>, soft: bool) -> Document<'a> {
59    Document::Offside { document, soft }
60}