Expand description
Template registry for file-based and inline templates.
This module provides TemplateRegistry, which manages template resolution
from multiple sources: inline strings, filesystem directories, or embedded content.
§Design
The registry is a thin wrapper around FileRegistry<String>,
providing template-specific functionality while reusing the generic file loading infrastructure.
The registry uses a two-phase approach:
- Collection: Templates are collected from various sources (inline, directories, embedded)
- Resolution: A unified map resolves template names to their content or file paths
This separation enables:
- Testability: Resolution logic can be tested without filesystem access
- Flexibility: Same resolution rules apply regardless of template source
- Hot reloading: File paths can be re-read on each render in development mode
§Template Resolution
Templates are resolved by name using these rules:
- Inline templates (added via
TemplateRegistry::add_inline) have highest priority - File templates are searched in directory registration order (first directory wins)
- Names can be specified with or without extension: both
"config"and"config.jinja"resolve
§Supported Extensions
Template files are recognized by extension, in priority order:
| Priority | Extension | Description |
|---|---|---|
| 1 (highest) | .jinja | Standard Jinja extension (MiniJinja engine) |
| 2 | .jinja2 | Full Jinja2 extension (MiniJinja engine) |
| 3 | .j2 | Short Jinja2 extension (MiniJinja engine) |
| 4 | .stpl | Simple template (SimpleEngine - format strings) |
| 5 (lowest) | .txt | Plain text templates |
If multiple files exist with the same base name but different extensions
(e.g., config.jinja and config.j2), the higher-priority extension wins.
§Collision Handling
The registry enforces strict collision rules:
- Same-directory, different extensions: Higher priority extension wins (no error)
- Cross-directory collisions: Panic with detailed message listing conflicting files
This strict behavior catches configuration mistakes early rather than silently using an arbitrary winner.
§Example
use standout_render::TemplateRegistry;
let mut registry = TemplateRegistry::new();
registry.add_template_dir("./templates")?;
registry.add_inline("override", "Custom content");
// Resolve templates
let content = registry.get_content("config")?;Structs§
- Template
File - A template file discovered during directory walking.
- Template
Registry - Registry for template resolution from multiple sources.
Enums§
- Registry
Error - Error type for template registry operations.
- Resolved
Template - How a template’s content is stored or accessed.
Constants§
- TEMPLATE_
EXTENSIONS - Recognized template file extensions in priority order.
Functions§
- walk_
template_ dir - Walks a template directory and collects template files.