pretty

Trait 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.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so 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>,

Source§

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

Source§

type Doc = BoxDoc<'a, A>

Source§

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

Source§

type Doc = RefDoc<'a, A>