#html-templating #html #template #hypermedia #web-apps #define

hypersynthetic_types

Common types definitions for hypersynthetic and hypersynthetic_macros

2 releases

0.1.1 Aug 19, 2023
0.1.0 Aug 19, 2023

#573 in Template engine

MIT/Apache

6KB
111 lines

hypersynthetic

Hypersynthetic is a library for writing HTML inside Rust. It is inspired by JSX and HEEx templates, and tries to be different from Tera and Minijinja in one key aspect: it only allows reusing HTML code via composition not via inheritance. It is suitable for building traditional web applications, where backend responds with HTML.

Here is an example of what hypersynthetic can do:

Example

use hypersynthetic::prelude::*;

#[component]
fn TodoItem(text: &str, done: bool) -> HtmlFragment {
    let text_decoration = if done { "line-through" } else { "none" };

    html! {
        <li style="text-decoration: {text_decoration};">
            {text}
        </li>
    }
}

fn main() {
    let todo_list = vec![
        ("Buy Milk", true),
        ("Read Rust Book", false),
        ("Write Web App using html! macro", false),
    ];

    let rendered_list = html! {
        <ul>
            <TodoItem :for={(text, done) in todo_list} text={text} done={done} />
        </ul>
    };

    // ... Render `rendered_list` into your application.
}

In this example:

The TodoItem component displays a to-do item, striking it through if it’s done. The main function defines a list of to-dos and uses the :for attribute to loop over them, rendering each one using the TodoItem component.

See the html macro for the description of the syntax and component macro for more details about using components

Features

  • rocket: Enables integration with the Rocket web framework and allows to return HtmlFragment from handlers. To use this feature, add features = ["rocket"] in your Cargo.toml when adding this library as a dependency.

License

Licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

No runtime deps