shadowplay 0.16.3

Utility for checking puppet syntax, a puppet manifest linter, a pretty printer, and a utility for exploring the Hiera.
Documentation
use pretty::RcDoc;

pub fn multiline_list<ELT, MAP>(list: &[ELT], multiline: Option<bool>, elt_to_doc: MAP) -> RcDoc<()>
where
    MAP: FnMut(&ELT) -> RcDoc<()>,
{
    let multiline = multiline.unwrap_or(list.len() > 1);
    if multiline {
        return RcDoc::hardline()
            .append(
                RcDoc::intersperse(
                    list.iter().map(elt_to_doc),
                    RcDoc::text(",").append(RcDoc::hardline()),
                )
                .group(),
            )
            .nest(2)
            .append(RcDoc::hardline());
    }
    RcDoc::softline()
        .append(
            RcDoc::intersperse(
                list.iter().map(elt_to_doc),
                RcDoc::text(",").append(RcDoc::softline()),
            )
            .group(),
        )
        .nest(2)
        .append(RcDoc::softline())
}

pub fn multiline_docs_list<'a, T>(list: Vec<T>, multiline: Option<bool>) -> RcDoc<'a, ()>
where
    T: pretty::Pretty<'a, pretty::RcAllocator, ()>,
{
    let multiline = multiline.unwrap_or(list.len() > 1);
    if multiline {
        return RcDoc::hardline()
            .append(
                RcDoc::intersperse(list.into_iter(), RcDoc::text(",").append(RcDoc::hardline()))
                    .group(),
            )
            .nest(2)
            .append(RcDoc::hardline());
    }
    RcDoc::softline()
        .append(
            RcDoc::intersperse(list.into_iter(), RcDoc::text(",").append(RcDoc::softline()))
                .group(),
        )
        .nest(2)
        .append(RcDoc::softline())
}