plissken-core::render::renderer Rust¶
Tera-based documentation renderer
This module provides the Renderer struct which combines Tera templating
with theme adapters to generate styled documentation output.
Structs¶
plissken-core::render::renderer::Renderer¶
pub
Documentation renderer using Tera templates with SSG-native theming.
The Renderer holds a Tera instance with pre-loaded templates and a
theme adapter for CSS variable injection. Templates access theme values
through the theme context variable.
Examples:
use plissken_core::render::Renderer;
// Without user overrides
let renderer = Renderer::new(Some("mkdocs-material"), None).unwrap();
let output = renderer.badge_async().unwrap();
assert!(output.contains("var(--md-"));
// With user overrides from project root
use std::path::Path;
let renderer = Renderer::new(Some("mkdocs-material"), Some(Path::new("."))).unwrap();
Fields¶
| Name | Type | Description |
|---|---|---|
tera |
Tera |
|
theme |
Box < dyn ThemeAdapter > |
|
template_loader |
TemplateLoader |
Methods¶
new pub¶
fn new (template : Option < & str > , project_root : Option < & Path >) -> crate :: error :: Result < Self >
Create a new renderer with the specified template theme.
Parameters:
| Name | Type | Description |
|---|---|---|
template |
- |
Optional template name (e.g., "mkdocs-material", "mdbook") |
project_root |
- |
Optional project root for user template overrides. If provided, templates in .plissken/templates/ will override defaults. |
Raises:
| Exception | Description |
|---|---|
Error |
Returns PlisskenError::Template if template initialization fails. |
Source
pub fn new(template: Option<&str>, project_root: Option<&Path>) -> crate::error::Result<Self> {
let template_loader = TemplateLoader::new(project_root);
let mut tera = Tera::default();
// Load templates from the template loader (supports user overrides)
tera.add_raw_templates(vec![
(
"partials/badge.html",
template_loader.get("partials/badge.html")?,
),
(
"partials/code_block.html",
template_loader.get("partials/code_block.html")?,
),
(
"partials/signature.html",
template_loader.get("partials/signature.html")?,
),
("module.html", template_loader.get("module.html")?),
])?;
let theme = get_theme_adapter(template);
Ok(Self {
tera,
theme,
template_loader,
})
}
has_user_override pub¶
Check if a user override exists for the given template.
Source
template_loader pub¶
Get the template loader for direct access to templates.
theme_name pub¶
Get the theme adapter name.
base_context pub¶
Create a base Tera context with theme values injected.
This context includes the theme object with all CSS variable mappings,
ready for use in templates.
Source
pub fn base_context(&self) -> Context {
let mut ctx = Context::new();
// Inject theme values as a nested object
ctx.insert(
"theme",
&ThemeContext {
// Core colors
code_bg: self.theme.code_bg().to_string(),
code_fg: self.theme.code_fg().to_string(),
primary: self.theme.primary().to_string(),
accent: self.theme.accent().to_string(),
muted: self.theme.muted().to_string(),
border: self.theme.border().to_string(),
name: self.theme.name().to_string(),
// Semantic colors
success: self.theme.success().to_string(),
warning: self.theme.warning().to_string(),
error: self.theme.error().to_string(),
info: self.theme.info().to_string(),
// Badge colors
badge_async: self.theme.badge_async().to_string(),
badge_unsafe: self.theme.badge_unsafe().to_string(),
badge_deprecated: self.theme.badge_deprecated().to_string(),
badge_binding: self.theme.badge_binding().to_string(),
badge_pub: self.theme.badge_pub().to_string(),
badge_pub_crate: self.theme.badge_pub_crate().to_string(),
badge_rust: self.theme.badge_rust().to_string(),
badge_python: self.theme.badge_python().to_string(),
},
);
ctx
}
render_badge pub¶
fn render_badge (& self , text : & str , color_type : & str , badge_type : & str ,) -> Result < String , tera :: Error >
Render a badge with the given text, color type, and semantic type.
Parameters:
| Name | Type | Description |
|---|---|---|
text |
- |
The badge text (e.g., "async", "deprecated") |
color_type |
- |
Color type: "blue", "green", "yellow", "red", "purple", "orange", "gray" |
badge_type |
- |
Semantic type for CSS class (e.g., "async", "visibility", "source") |
Source
badge_async pub¶
Render an "async" badge (blue).
Source
badge_unsafe pub¶
Render an "unsafe" badge (red).
Source
badge_deprecated pub¶
Render a "deprecated" badge (yellow).
Source
badge_visibility pub¶
Render a visibility badge.
Parameters:
| Name | Type | Description |
|---|---|---|
visibility |
- |
One of: "pub", "pub(crate)", "private" |
Source
badge_source pub¶
Render a source type badge with emoji.
Parameters:
| Name | Type | Description |
|---|---|---|
source_type |
- |
One of: "python", "rust", "binding" |
Source
pub fn badge_source(&self, source_type: &str) -> Result<String, tera::Error> {
let (text, color) = match source_type.to_lowercase().as_str() {
"python" => ("Python", "blue"),
"rust" => ("Rust", "orange"),
"binding" | "pyo3" => ("Binding", "purple"),
_ => (source_type, "gray"),
};
self.render_badge(text, color, "source")
}
render_code_block pub¶
fn render_code_block (& self , code : & str , language : Option < & str > , caption : Option < & str > ,) -> Result < String , tera :: Error >
Render a code block with optional language and caption.
Parameters:
| Name | Type | Description |
|---|---|---|
code |
- |
The code content |
language |
- |
Optional language for syntax highlighting |
caption |
- |
Optional caption/title for the code block |
Source
pub fn render_code_block(
&self,
code: &str,
language: Option<&str>,
caption: Option<&str>,
) -> Result<String, tera::Error> {
let mut ctx = self.base_context();
ctx.insert("code", code);
ctx.insert("language", &language.unwrap_or(""));
ctx.insert("caption", &caption.unwrap_or(""));
self.tera.render("partials/code_block.html", &ctx)
}
render_signature pub¶
fn render_signature (& self , name : & str , params : & str , return_type : Option < & str > , is_async : bool ,) -> Result < String , tera :: Error >
Render a function/method signature.
Parameters:
| Name | Type | Description |
|---|---|---|
name |
- |
Function name |
params |
- |
Parameter list as a string |
return_type |
- |
Optional return type |
is_async |
- |
Whether the function is async |
Source
pub fn render_signature(
&self,
name: &str,
params: &str,
return_type: Option<&str>,
is_async: bool,
) -> Result<String, tera::Error> {
let mut ctx = self.base_context();
ctx.insert("name", name);
ctx.insert("params", params);
ctx.insert("return_type", &return_type.unwrap_or(""));
ctx.insert("is_async", &is_async);
self.tera.render("partials/signature.html", &ctx)
}
render_module pub¶
fn render_module (& self , module_name : & str , description : & str , functions : & [String] , classes : & [String] ,) -> Result < String , tera :: Error >
Render a module documentation page.
Parameters:
| Name | Type | Description |
|---|---|---|
module_name |
- |
Name of the module |
description |
- |
Module description/docstring |
functions |
- |
List of function documentation sections |
classes |
- |
List of class documentation sections |
Source
pub fn render_module(
&self,
module_name: &str,
description: &str,
functions: &[String],
classes: &[String],
) -> Result<String, tera::Error> {
let mut ctx = self.base_context();
ctx.insert("module_name", module_name);
ctx.insert("description", description);
ctx.insert("functions", functions);
ctx.insert("classes", classes);
self.tera.render("module.html", &ctx)
}
render_template pub¶
fn render_template (& self , template_name : & str , extra_context : & Context ,) -> Result < String , tera :: Error >
Render an arbitrary template with the given context.
The theme values are automatically injected into the context.
Source
pub fn render_template(
&self,
template_name: &str,
extra_context: &Context,
) -> Result<String, tera::Error> {
let mut ctx = self.base_context();
// Merge extra context (extra context values override base if there are conflicts)
let json_value = extra_context.clone().into_json();
let obj = json_value
.as_object()
.ok_or_else(|| tera::Error::msg("extra_context must serialize to a JSON object"))?;
for (key, value) in obj {
ctx.insert(key, value);
}
self.tera.render(template_name, &ctx)
}
plissken-core::render::renderer::ThemeContext¶
private
Derives: serde :: Serialize
Theme context for Tera templates.
This struct is serialized into the Tera context as the theme variable,
allowing templates to access theme values like {{ theme.code_bg }}.
Fields¶
| Name | Type | Description |
|---|---|---|
code_bg |
String |
|
code_fg |
String |
|
primary |
String |
|
accent |
String |
|
muted |
String |
|
border |
String |
|
name |
String |
|
success |
String |
|
warning |
String |
|
error |
String |
|
info |
String |
|
badge_async |
String |
|
badge_unsafe |
String |
|
badge_deprecated |
String |
|
badge_binding |
String |
|
badge_pub |
String |
|
badge_pub_crate |
String |
|
badge_rust |
String |
|
badge_python |
String |