pub struct TemplateRenderer { /* private fields */ }Expand description
Template renderer with Tera engine and custom functions.
This struct wraps a Tera instance with AGPM-specific configuration, custom functions, and filters. It provides a safe, sandboxed environment for rendering Markdown templates.
§Security
The renderer is configured with security restrictions:
- No file system access via includes/extends (except content filter)
- No network access
- Sandboxed template execution
- Custom functions are carefully vetted
- Project file access restricted to project directory with validation
Implementations§
Source§impl TemplateRenderer
impl TemplateRenderer
Sourcepub fn new(
enabled: bool,
project_dir: PathBuf,
max_content_file_size: Option<u64>,
) -> Result<Self>
pub fn new( enabled: bool, project_dir: PathBuf, max_content_file_size: Option<u64>, ) -> Result<Self>
Create a new template renderer with AGPM-specific configuration.
§Arguments
enabled- Whether templating is enabled globallyproject_dir- Project root directory for content filter validationmax_content_file_size- Maximum file size in bytes for content filter (None for no limit)
§Returns
Returns a configured TemplateRenderer instance with custom filters registered.
§Filters
The following custom filters are registered:
content: Read project-specific files with path validation and size limits
Sourcepub fn render_template(
&mut self,
template_content: &str,
context: &TeraContext,
) -> Result<String>
pub fn render_template( &mut self, template_content: &str, context: &TeraContext, ) -> Result<String>
Render a Markdown template with the given context.
This method supports recursive template rendering where project files
can reference other project files using the content filter.
Rendering continues up to filters::MAX_RENDER_DEPTH levels deep.
§Arguments
template_content- The raw Markdown template contentcontext- The template context containing variables
§Returns
Returns the rendered Markdown content.
§Errors
Returns an error if:
- Template syntax is invalid
- Context variables are missing
- Custom functions/filters fail
- Recursive rendering exceeds maximum depth (10 levels)
§Literal Blocks
Content wrapped in ```literal fences will be protected from template rendering and displayed literally:
```literal
{{ agpm.deps.snippets.example.content }}
```This is useful for documentation that shows template syntax examples.
§Recursive Rendering
When a template contains content filter references, those files
may themselves contain template syntax. The renderer automatically
detects this and performs multiple rendering passes until either:
- No template syntax remains in the output
- Maximum depth is reached (error)
Example recursive template chain:
# Main Agent
{{ 'docs/guide.md' | content }}Where docs/guide.md contains:
# Guide
{{ 'docs/common.md' | content }}This will render up to 10 levels deep.