rustapi-view 0.1.8

Template rendering support for RustAPI - Server-side HTML with Tera templates
Documentation

rustapi-view

Template rendering support for RustAPI framework using Tera templates.

Features

  • Tera Templates: Full Tera template engine support
  • Type-Safe Context: Build template context from Rust structs
  • Auto-Reload: Development mode auto-reloads templates (optional)
  • Response Types: View<T> and Html response types
  • Layout Support: Template inheritance and blocks

Quick Start

use rustapi_rs::prelude::*;
use rustapi_view::{View, Templates};
use serde::Serialize;

#[derive(Serialize)]
struct HomeContext {
    title: String,
    user: Option<String>,
}

async fn home() -> View<HomeContext> {
    View::new("home.html", HomeContext {
        title: "Welcome".to_string(),
        user: Some("Alice".to_string()),
    })
}

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    // Initialize templates from directory
    let templates = Templates::new("templates/**/*.html")?;

    RustApi::new()
        .state(templates)
        .route("/", get(home))
        .run("127.0.0.1:8080")
        .await
}

Template Files

Create your templates in a templates/ directory:

<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}{{ title }}{% endblock %}</title>
</head>
<body>
    {% block content %}{% endblock %}
</body>
</html>

<!-- templates/home.html -->
{% extends "base.html" %}

{% block content %}
<h1>Welcome{% if user %}, {{ user }}{% endif %}!</h1>
{% endblock %}

Context Building

use rustapi_view::{Context, View};

// From struct (requires Serialize)
let view = View::new("template.html", MyStruct { ... });

// From context builder
let view = View::with_context("template.html", |ctx| {
    ctx.insert("name", "Alice");
    ctx.insert("items", &vec!["a", "b", "c"]);
});

Configuration

use rustapi_view::{Templates, TemplatesConfig};

// With configuration
let templates = Templates::with_config(TemplatesConfig {
    glob: "templates/**/*.html".to_string(),
    auto_reload: cfg!(debug_assertions), // Auto-reload in debug mode
    strict_mode: true, // Fail on undefined variables
});

License

MIT OR Apache-2.0