Trait pretty::DocAllocator

source ·
pub trait DocAllocator<'a, A = ()> {
    type Doc: Deref<Target = Doc<'a, Self::Doc, A>>;

    // Required method
    fn alloc(&'a self, _: Doc<'a, Self::Doc, A>) -> Self::Doc;

    // Provided methods
    fn nil(&'a self) -> DocBuilder<'a, Self, A> { ... }
    fn newline(&'a self) -> DocBuilder<'a, Self, A> { ... }
    fn space(&'a self) -> DocBuilder<'a, Self, A> { ... }
    fn as_string<U: ToString>(&'a self, data: U) -> DocBuilder<'a, Self, A> { ... }
    fn text<U: Into<Cow<'a, str>>>(&'a self, data: U) -> DocBuilder<'a, Self, A> { ... }
    fn concat<I>(&'a self, docs: I) -> DocBuilder<'a, Self, A>
       where I: IntoIterator,
             I::Item: Into<Doc<'a, Self::Doc, A>> { ... }
    fn intersperse<I, S>(
        &'a self,
        docs: I,
        separator: S
    ) -> DocBuilder<'a, Self, A>
       where I: IntoIterator,
             I::Item: Into<Doc<'a, Self::Doc, A>>,
             S: Into<Doc<'a, Self::Doc, A>> + Clone { ... }
}
Expand description

The DocAllocator trait abstracts over a type which can allocate (pointers to) Doc.

Required Associated Types§

source

type Doc: Deref<Target = Doc<'a, Self::Doc, A>>

Required Methods§

source

fn alloc(&'a self, _: Doc<'a, Self::Doc, A>) -> Self::Doc

Provided Methods§

source

fn nil(&'a self) -> DocBuilder<'a, Self, A>

Allocate an empty document.

source

fn newline(&'a self) -> DocBuilder<'a, Self, A>

Allocate a single newline.

source

fn space(&'a self) -> DocBuilder<'a, Self, A>

Allocate a single space.

source

fn as_string<U: ToString>(&'a self, data: U) -> DocBuilder<'a, Self, A>

Allocate a document containing the text t.to_string().

The given text must not contain line breaks.

source

fn text<U: Into<Cow<'a, str>>>(&'a self, data: U) -> DocBuilder<'a, Self, A>

Allocate a document containing the given text.

The given text must not contain line breaks.

source

fn concat<I>(&'a self, docs: I) -> DocBuilder<'a, Self, A>
where I: IntoIterator, I::Item: Into<Doc<'a, Self::Doc, A>>,

Allocate a document concatenating the given documents.

source

fn intersperse<I, S>(&'a self, docs: I, separator: S) -> DocBuilder<'a, Self, A>
where I: IntoIterator, I::Item: Into<Doc<'a, Self::Doc, A>>, S: Into<Doc<'a, Self::Doc, A>> + Clone,

Allocate a document that intersperses the given separator S between the given documents [A, B, C, ..., Z], yielding [A, S, B, S, C, S, ..., S, Z].

Compare the intersperse method from the itertools crate.

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl<'a, D, A> DocAllocator<'a, A> for &'a D
where D: ?Sized + DocAllocator<'a, A>,

§

type Doc = <D as DocAllocator<'a, A>>::Doc

source§

fn alloc(&'a self, doc: Doc<'a, Self::Doc, A>) -> Self::Doc

Implementors§

source§

impl<'a, A> DocAllocator<'a, A> for BoxAllocator

§

type Doc = BoxDoc<'a, A>

source§

impl<'a, A> DocAllocator<'a, A> for Arena<'a, A>

§

type Doc = RefDoc<'a, A>