#html #web #ssr #html-templating #template #web-framework

ryde_html

使用纯 Rust 函数渲染 HTML 的舒适方式

2 个版本

0.2.1 2024 年 3 月 18 日
0.2.0 2024 年 2 月 29 日

#539HTTP 服务器


用于 ryde_router

MIT 许可证

20KB
549

html

html 提供了一种从纯 Rust 函数渲染 HTML 的舒适方式

cargo add html

编写一些 HTML

use html::*;

fn render(element: Element) -> String {
  html::render((
    doctype(),
    html((
      head((title("title"), meta().charset("utf-8"))),
      body(element)
    ))
  ))
}

#[cfg(test)]
mod tests {

  #[test]
  fn it_works() {
      assert_eq!(
        render(div("html")),
        "<!DOCTYPE html><html><head><title>title</title></head><body><div>html</div></body></html>"
      )
  }
}

自定义属性

use html::*;

fn htmx_input() -> Element {
  input()
    .attr("hx-post", "/")
    .attr("hx-target", ".target")
    .attr("hx-swap", "outerHTML")
    .attr("hx-push-url", "false")
}

fn main() {
  let html: String = render(htmx_input());
  // html == <input hx-post="/" hx-target=".target" hx-swap="outerHTML" hx-push-url="false">
}

自定义元素

use html::*;

fn turbo_frame(children: Element) -> Element {
    element("turbo-frame", children)
}

fn main() {
  let html: String = render(turbo_frame(div("inside turbo frame")).id("id"));
  // <turbo-frame id="id">
  //   <div>inside turbo frame</div>
  // </turbo-frame>
}

依赖关系

~1.6–2.3MB
~46K SLoC