Skip to main content

Renderer

Trait Renderer 

Source
pub trait Renderer {
    // Required method
    fn render_node(&mut self, node: &Node) -> String;

    // Provided methods
    fn render(&mut self, node: &Node) -> String { ... }
    fn render_children(&mut self, node: &Node) -> String { ... }
}
Expand description

A renderer for an AST node tree.

Implement render_node to decide how each node is emitted. Call render_children for transparent containers or when a node’s children should be rendered recursively. Renderers choose their output format and escaping rules.

This is separate from crate::to_html, which parses Markdown source and renders the parser’s events with the built-in HTML compiler.

§Example

ⓘ
use socketry_markdown::{mdast::Node, renderer::Renderer};

struct PlainText;

impl Renderer for PlainText {
    fn render_node(&mut self, node: &Node) -> String {
        match node {
            Node::Text(text) => text.value.clone(),
            Node::InlineCode(code) => code.value.clone(),
            Node::Code(code) => code.value.clone(),
            Node::Break(_) => "\n".into(),
            Node::Image(image) => image.alt.clone(),
            Node::ImageReference(image) => image.alt.clone(),
            Node::Definition(_) | Node::FootnoteReference(_) | Node::ThematicBreak(_) => {
                String::new()
            }
            _ => self.render_children(node),
        }
    }
}

let node = Node::Fragment(socketry_markdown::mdast::Fragment {
    children: vec![Node::Text(socketry_markdown::mdast::Text {
        value: "hello".into(),
        position: None,
    })],
});
let mut renderer = PlainText;
let plain_text = node.render_with(&mut renderer);

Required Methods§

Source

fn render_node(&mut self, node: &Node) -> String

Render one AST node into this renderer’s output.

Provided Methods§

Source

fn render(&mut self, node: &Node) -> String

Render a node and its descendants.

Source

fn render_children(&mut self, node: &Node) -> String

Render the direct children of a parent node in order.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§