[][src]Macro render_macros::html

html!() { /* proc-macro */ }

Render a component tree to an HTML string, using XML-like tags.

The ergonomics are based on JSX:

Simple HTML elements start with a lowercase

let rendered = html! { <div id={"main"}>{"Hello"}</div> };
assert_eq!(rendered, r#"<div id="main">Hello</div>"#);

Custom components start with an uppercase

use render::Renderable;

#[derive(Debug)]
struct Heading<'t> { title: &'t str }

impl<'t> Renderable for Heading<'t> {
    fn render(self) -> String {
        html! { <h1>{self.title}</h1> }
    }
}

let rendered = html! { <Heading title={"Hello  world!"} /> };

assert_eq!(rendered, r#"<h1>Hello  world!</h1>"#);

Punning is supported

but instead of expanding to value={true}, it expands to value={value} like Rust's punning

let class = "some_class";

let rendered = html! {
    <div class />
};

assert_eq!(rendered, r#"<div class="some_class" />"#);

Values are always surrounded by curly braces

let rendered = html! {
    <div id={"main"} />
};

assert_eq!(rendered, r#"<div id="main" />"#);