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§
Sourcefn render_node(&mut self, node: &Node) -> String
fn render_node(&mut self, node: &Node) -> String
Render one AST node into this renderer’s output.
Provided Methods§
Sourcefn render_children(&mut self, node: &Node) -> String
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".