rstml-component-axum
is a crate designed to streamline the usage of rstml-component
within Axum projects. This crate provides glue code and helpers to make it easier to create dynamic HTML content using rstml-component
within your Axum applications.
Simplified Integration: Seamlessly integrate rstml-component
into your Axum handlers for efficient HTML generation.
Optimized for Axum: Enjoy the benefits of both rstml-component
and Axum for building high-performance server applications.
To use rstml-component-axum
in your Axum project, add it as a dependency in your Cargo.toml
:
toml
[dependencies]
rstml-component-axum = "0.1.0"
Here's a basic example demonstrating how to use rstml-component-axum
to integrate rstml-component
with an Axum handler:
```rust use axum::{response::IntoResponse, routing::get, Router}; use rstmlcomponent::{movehtml, writehtml, For, HtmlComponent, HtmlContent}; use rstmlcomponent_axum::HtmlContentAxiosExt; use std::net::SocketAddr;
struct Book { title: &'static str, author: &'static str, }
impl Book { fn new(title: &'static str, author: &'static str) -> Self { Self { title, author } } }
impl HtmlContent for Book { fn fmt(self, formatter: &mut rstmlcomponent::HtmlFormatter) -> std::fmt::Result { writehtml!(formatter,
// Your Axum handler async fn index() -> impl IntoResponse { let books = [ ("Moby Dick", "Herman Melville"), ("Lord of the Rings", "John Ronald Reuel Tolkien"), ];
move_html!(
<div class="books">
<For items={books}>
{ |f, book| Book::new(book.0, book.1).fmt(f) }
</For>
</div>
)
.into_html()
}
async fn main() { let app = Router::new().route("/", get(index));
let addr = SocketAddr::from(([0, 0, 0, 0], 3000));
println!("listening on {}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
} ```
For a more detailed walkthrough and additional examples, refer to the documentation for rstml-component-axum
.
This project is licensed under the MIT License.