9 releases

0.2.4 May 16, 2024
0.2.3 Mar 14, 2024
0.2.2 Jan 18, 2024
0.2.1 Aug 18, 2023
0.1.3 Aug 17, 2023

#86 in Template engine


Used in rstml-component-axum

MIT license

37KB
628 lines

rstml-component: HTML Component Library for Rust

rstml-component is a Rust library that empowers developers to create dynamic HTML components efficiently. With this library, you can define HTML components using Rust structs and easily generate HTML on-the-fly, making it especially useful for server-side applications that need to produce HTML content.

Features

  • Declarative Component Definition: Define HTML components using Rust structs, making your code more organized and maintainable.

  • Effortless HTML Generation: Generate HTML content dynamically by leveraging the power of Rust's expressive syntax.

  • Designed for Server-Side Applications: Perfectly suited for server applications that need to generate HTML content on-the-fly.

  • Template Reusability: Create reusable templates by structuring components, enhancing code reusability across your project.

Installation

To use rstml-component in your Rust project, simply add it as a dependency in your Cargo.toml:

[dependencies]
rstml-component = "0.2.1"

Usage

Here's a quick example to demonstrate how easy it is to define and use HTML components using rstml-component:

use rstml_component::{HtmlComponent, HtmlContent, HtmlFormatter};

#[derive(HtmlComponent)]
struct Page<T>
where
		T: Into<String>,
{
	title: T,
	heading: String,
}

impl<T> HtmlContent for Page<T>
where
		T: Into<String>,
{
	fn fmt(self, formatter: &mut HtmlFormatter) -> std::fmt::Result {
		write_html!(formatter,
			<Template title=self.title attribute="world">
				<h1>{self.heading}</h1>
				<p>"This is a test"</p>
			</Template>
		)
	}
}

// Example Axum handler - requires rstml-component-axum
async fn index() -> impl IntoResponse {
	Page {
		title: "My Title",
		heading: "Page Heading",
	}
	.into_html()
}

For more detailed information and examples, please refer to our Documentation.

License

This project is licensed under the MIT License.

Dependencies

~1.9–8MB
~58K SLoC