1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
//! Document builders.

mod builder;

use super::{utility::is_broken, Document};
pub use builder::Builder;

/// Creates a sequence of documents.
pub const fn sequence<'a>(documents: &'a [Document<'a>]) -> Document<'a> {
    Document::Sequence(documents)
}

/// Creates a line suffix.
pub const fn line_suffix(string: &str) -> Document {
    Document::LineSuffix(string)
}

/// Flattens a document.
pub const fn flatten<'a>(document: &'a Document<'a>) -> Document<'a> {
    Document::Break(false, document)
}

/// Breaks a document into multiple lines.
pub const fn r#break<'a>(document: &'a Document<'a>) -> Document<'a> {
    Document::Break(true, document)
}

/// Flattens a document if a `condition` is true.
pub fn flatten_if<'a>(condition: bool, document: &'a Document<'a>) -> Document<'a> {
    Document::Break(!condition || is_broken(document), document)
}

/// Indents a document.
pub const fn indent<'a>(document: &'a Document<'a>) -> Document<'a> {
    Document::Indent(document)
}

/// Creates a new line.
pub const fn line() -> Document<'static> {
    Document::Line
}

/// Creates an empty document.
pub const fn empty() -> Document<'static> {
    Document::String("")
}

/// Creates a document indented to a current column.
pub const fn offside<'a>(document: &'a Document<'a>) -> Document<'a> {
    Document::Offside(document)
}