nargo-template 0.0.1

Nargo template engine management
Documentation

Nargo Template

Nargo 模板引擎管理库,提供统一的模板渲染接口,支持多种模板引擎。

功能特性

  • 统一的模板渲染接口
  • 内置 Handlebars 模板引擎支持
  • 可扩展的自定义模板引擎支持
  • 模板目录自动扫描和加载
  • 同步和异步渲染支持

支持的模板引擎

Handlebars

  • 文件扩展名: .hbs
  • 流行的 JavaScript 模板语言
  • 支持条件、循环、辅助函数等

DejaVu

  • 文件扩展名: .dj
  • 编译期零成本抽象
  • 高性能模板引擎

自定义

  • 文件扩展名: .tpl
  • 通过实现 TemplateRenderer trait 支持

快速开始

基本使用

use nargo_template::{TemplateManager, TemplateEngine};
use serde_json::json;

fn main() -> anyhow::Result<()> {
    let mut manager = TemplateManager::new();

    // 注册模板
    let renderer = manager.get_renderer_mut(TemplateEngine::Handlebars).unwrap();
    renderer.register_template("greeting", "Hello, {{name}}!")?;

    // 渲染模板
    let context = json!({"name": "World"});
    let result = manager.render(TemplateEngine::Handlebars, "greeting", &context)?;

    assert_eq!(result, "Hello, World!");
    Ok(())
}

从目录加载模板

use nargo_template::{TemplateManager, TemplateEngine};

fn main() -> anyhow::Result<()> {
    let mut manager = TemplateManager::new();

    // 添加模板目录
    manager.add_template_dir("./templates");

    // 加载所有 Handlebars 模板
    manager.load_templates(TemplateEngine::Handlebars)?;

    Ok(())
}

实现自定义模板引擎

use async_trait::async_trait;
use nargo_template::TemplateRenderer;
use anyhow::Result;
use std::path::Path;

struct MyRenderer {
    // 你的渲染器状态
}

#[async_trait]
impl TemplateRenderer for MyRenderer {
    fn render(&self, template_name: &str, context: &serde_json::Value) -> Result<String> {
        // 实现你的渲染逻辑
        Ok("rendered content".to_string())
    }

    fn register_template(&mut self, name: &str, content: &str) -> Result<()> {
        // 实现模板注册逻辑
        Ok(())
    }

    fn register_template_file<P: AsRef<Path>>(&mut self, name: &str, path: P) -> Result<()> {
        // 实现模板文件注册逻辑
        Ok(())
    }

    fn register_templates_from_dir<P: AsRef<Path>>(
        &mut self,
        dir: P,
        extension: Option<&str>,
    ) -> Result<()> {
        // 实现从目录加载模板逻辑
        Ok(())
    }
}

// 注册自定义渲染器
let mut manager = TemplateManager::new();
manager.register_renderer(TemplateEngine::Custom, Box::new(MyRenderer {}));

API 文档

TemplateManager

模板管理器,负责管理多个模板引擎的渲染器。

方法

  • new() - 创建新的模板管理器
  • register_renderer(engine, renderer) - 注册自定义渲染器
  • get_renderer(engine) - 获取渲染器
  • get_renderer_mut(engine) - 获取可变渲染器
  • add_template_dir(dir) - 添加模板目录
  • load_templates(engine) - 从已注册的目录加载模板
  • render(engine, template_name, context) - 渲染模板
  • render_async(engine, template_name, context) - 异步渲染模板

TemplateRenderer trait

模板渲染器 trait,所有模板引擎都需要实现。

必需方法

  • render(template_name, context) - 渲染模板
  • register_template(name, content) - 注册模板
  • register_template_file(name, path) - 注册模板文件
  • register_templates_from_dir(dir, extension) - 从目录加载模板

可选方法

  • render_async(template_name, context) - 异步渲染模板(默认调用同步版本)

许可证

MIT