Ritz

Ritz is a simple templating library that has JSX-like syntax powered by Snax.

Requirements

Ritz requires Rust 1.32 or newer.

Some things are still a bit in flux, so I'm sorry in advance if I break anything!

Examples

Simple Page

```rust use ritz::html;

fn main() { let page_title = "Hello, world, from Snax!";

let page = html! {
    /* Ritz supports regular multi-line Rust comments. */
    <html>
        <head>
            /*
                Literal strings need to be quoted, unlike JSX.
                This makes whitespace much more explicit, which is
                useful!
            */
            <title>"Hello, Snax!"</title>
        </head>
        <body>
            /*
                Ritz supports embedding Rust expressions that return
                `impl IntoIterator<HtmlContent>`. String and &str work
                great here!
            */
            <h1>
                { page_title }
            </h1>
        </body>
    </html>
};

// The result of the html! macro is ritz::HtmlContent.
// It implements Display and gives you compact HTML without a doctype!
println!("<!doctype html>");
println!("{}", page);

} ```

Composition via functions

Ritz is designed to work well when using functions to reuse pieces of HTML!

```rust use ritz::{html, Fragment, HtmlContent};

fn userwidget<'a>(name: &'a str, age: u32) -> HtmlContent<'a> { html! {

{ name } " is " { age.tostring() } " years old!"
} }

fn users() -> HtmlContent<'static> { let users = vec![ ("Gandalf", 34), ("Arwen Undómie", 75), ("Primula Brandybuck", 133), ];

html! {
    <div class="users">
        { Fragment::new(users.iter().map(|(name, age)| user_widget(name, *age))) }
    </div>
}

} ```

License

Ritz is available under the MIT license. See LICENSE.txt for details.