#source #html-macro #component #template #nightly

rempl

A simple library for creating html components directly in your source

5 releases (3 breaking)

0.3.1 Aug 8, 2024
0.3.0 Aug 8, 2024
0.2.0 Aug 7, 2024
0.1.0 Aug 7, 2024
0.0.1 Aug 7, 2024

#518 in Rust patterns

MPL-2.0 license

18KB
178 lines

Rempl

crates.io Documentation MSRV MPL Dependency Status CI downloads

About

Rempl is a simple library that adds two macros to allow you to make functions that return html easily by embedding the html directly in your source code. No templates required!

Installation

To get started with rempl simply run

$ cargo add rempl

in your terminal.

Features

Rempl adds two simple macros. First, the html! macro which allows you to create html sections directly within your rust source. Example:

let classes = vec!["bg-red", "b-solid"];
let msg = "Hello, world";
html! {
    <p class={ classes.join(" ") }>{ msg }</p>
}

As you can see, you can pass any rust expression as an HTML element attribute, or if it implments the Display trait, directly in the html itself.

The second macro is the component macro, which allows you to create custom html tags, that you can call within your html! invocations. Example:

fn Echo(class: String, children: HtmlNode) -> HtmlTerm {
    html! {
        <p class={ class }>{ children }</p>
    }
}

fn main() {
    let r = html! {
        <@Echo class="Test">
            "Hello, world!"
        </Echo>
    }
}

Components can be called by using putting a @ in front of the tag name, any attributes will be passed as parameters to the function, except for the inner html of the tag, which will be passed in the required children parameter.

You can render your html output to a String by simpling calling .to_string() on the HtmlTerm.

Features

If you're running a nightly compiler, you can enable the nightly feature to enable some better diagnositics when writing invalid HTML.

License

This project is licensed under the Mozilla Public License which you can find here (LICENSE) or https://www.mozilla.org/en-US/MPL/2.0/.

Dependencies

~260–710KB
~17K SLoC