11 unstable releases (5 breaking)
new 0.6.1 | Oct 25, 2024 |
---|---|
0.6.0 |
|
0.5.0 | Sep 5, 2024 |
0.4.0 | Jun 13, 2024 |
0.1.3 | Aug 21, 2023 |
#93 in Template engine
31 downloads per month
24KB
287 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 returnHtmlFragment
from handlers. To use this feature, addfeatures = ["rocket"]
in yourCargo.toml
when adding this library as a dependency.
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
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.
Dependencies
~0.4–31MB
~488K SLoC