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,
metadata: Option<&RenderingMetadata>,
) -> Result<String, TemplateError>
pub fn render_template( &mut self, template_content: &str, context: &TeraContext, metadata: Option<&RenderingMetadata>, ) -> Result<String, TemplateError>
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.
Render a Markdown template with the given context.
This method processes template syntax using the Tera engine. Content within
placeholders before processing, then restoring it afterwards.
# Arguments
* `template_content` - The raw Markdown template content
* `context` - 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:
````markdown
```literal
{{ agpm.deps.snippets.example.content }}// This is a documentation example showing template syntax
// The actual template content would be in a separate file
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:
// In a markdown file:
// # Main Agent
// {{ "docs/guide.md" | content }}
Where 'docs/guide.md' contains:
// # Guide
// {{ "docs/common.md" | content }}
This will render up to 10 levels deep.Sourcepub fn format_tera_error(error: &Error) -> String
pub fn format_tera_error(error: &Error) -> String
Format a Tera error with detailed information about what went wrong.
Tera errors can contain various types of issues:
- Missing variables (e.g., “Variable
foonot found”) - Syntax errors (e.g., “Unexpected end of template”)
- Filter/function errors (e.g., “Filter
unknownnot found”)
This function extracts the root cause and formats it in a user-friendly way, filtering out unhelpful internal template names like ‘__tera_one_off’.
§Arguments
error- The Tera error to format
Auto Trait Implementations§
impl Freeze for TemplateRenderer
impl RefUnwindSafe for TemplateRenderer
impl Send for TemplateRenderer
impl Sync for TemplateRenderer
impl Unpin for TemplateRenderer
impl UnwindSafe for TemplateRenderer
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more