Crate html_node

source ·
Expand description

Convert HTML to a Node.

Values returned from braced blocks ({ ... }) are expected to return something that implements Into<Node>. This is already implemented for anything that implements IntoIterator<Item = Node>, so you can return something like a Vec<Node> or an Iterator<Item = Node> directly.

Due to Rust’s trait implementation rules, you cannot directly return Strings. Instead, you can use the text! macro to convert the String to a Node::Text.

Node implements Display (and by extension ToString), so you can turn it into a string representation easily using Node::to_string().

See the rstml docs for supported tags and syntax.

Example

use html_node::{html, text};

let grocery_list = vec!["milk", "eggs", "bread"];

let html = html! {
    <div>
        <h1>Shopping List</h1>
        <ul>
            { grocery_list.into_iter().zip(1..).map(|(item, i)| html! {
                <li class="item">
                    <input type="checkbox" id={format!("item-{i}")}>
                    <label for={format!("item-{i}")}>{text!("{item}")}</label>
                </li>
            }) }
        </ul>
    </div>
};

let expected = "\
<div>\
    <h1>Shopping List</h1>\
    <ul>\
        <li class=\"item\">\
            <input type=\"checkbox\" id=\"item-1\">\
            <label for=\"item-1\">milk</label>\
        </li>\
        <li class=\"item\">\
            <input type=\"checkbox\" id=\"item-2\">\
            <label for=\"item-2\">eggs</label>\
        </li>\
        <li class=\"item\">\
            <input type=\"checkbox\" id=\"item-3\">\
            <label for=\"item-3\">bread</label>\
        </li>\
    </ul>\
</div>\
";

assert_eq!(html.to_string(), expected);

Macros

Structs

Enums