[][src]Crate render

🔏 A safe and simple template engine with the ergonomics of JSX

The Renderable trait contains a simple function that returns String. This is very handy for type-safe HTML templates, but can also work for writing tree-like terminal coloring mechanism like ReasonML's Pastel.

Why this is different from typed-html?

typed-html is a wonderful library. Unfortunately, it focused its power in strictness of the HTML spec itself, and doesn't allow arbitrary compositions of custom elements.

render takes a different approach. For now, HTML is not typed at all. It can get any key and get any string value. The main focus is custom components, so you can create a composable and declarative template with no runtime errors.

Usage

#![feature(proc_macro_hygiene)]

// A simple HTML 5 doctype declaration
use render::html::HTML5Doctype;
use render::{
    // A macro to compose components in JSX fashion
    html,
    // A component that just render its children
    Fragment,
    // A trait for custom components
    Renderable,
};

// This can be any layout we want
#[derive(Debug)]
struct Page<'a, T: Renderable> {
    title: &'a str,
    children: T,
}

// Implementing `Renderable` gives the ability to compose
// components
impl<'a, T: Renderable> Renderable for Page<'a, T> {
    fn render(self) -> String {
        html! {
          <Fragment>
            <HTML5Doctype />
            <html>
              <head><title>{self.title}</title></head>
              <body>
                {self.children}
              </body>
            </html>
          </Fragment>
        }
    }
}

// This can be a route in Rocket, the web framework,
// for instance.
pub fn some_page(user_name: &str) -> String {
    html! {
      <Page title={"Home"}>
        {format!("Welcome, {}", user_name)}
      </Page>
    }
}

Re-exports

pub use fragment::Fragment;

Modules

fragment

The fragment component

html

HTML utilities

Macros

html

Render a component tree to an HTML string, using XML-like tags.

raw

Creates a raw (unencoded) html string

rsx

Generate a renderable component tree, before rendering it

Structs

Raw

A raw (unencoded) html string

SimpleElement

Simple HTML element tag

Traits

Renderable

A renderable component