wayver's git archive


an obsidian renderer
git clone https://git.wayver.dev/sable

sable-renderer/src/page.rs@337ba67f65eaa17b44e371af7c0f0c761d6aa914

raw
Date Commit Message Author Files + -
2026-02-23 01:55 initial mvp wayverd 139 17808 0
...

1use sable_core::config::PageConfig;
2use tera::Context;
3
4use crate::{IntoDiagnostic as _, Renderer, RendererError};
5
6impl Renderer {
7    /// Render all custom pages using [`tera`] and write then to the destination folder.
8    pub fn render_pages(&self) {
9        for page in &self.config.pages {
10            if let Err(err) = self.render_page(page).into_diagnostic() {
11                tracing::error!(path=%page.path, "failed to render custom page");
12                eprintln!("{err:?}");
13            }
14        }
15    }
16
17    fn render_page(&self, page: &PageConfig) -> Result<(), RendererError> {
18        let dest_path = self.config.build.join(&page.path);
19
20        if let Some(dir) = dest_path.parent() {
21            std::fs::create_dir_all(dir).map_err(RendererError::CreateDir)?;
22        }
23
24        let mut ctx = Context::new();
25
26        ctx.insert("meta", &self.meta_info);
27        if let Some(data) = self.config.data.as_ref() {
28            ctx.insert("data", data);
29        }
30
31        let rendered = self
32            .templates
33            .render(&page.template, &ctx)
34            .map_err(RendererError::RenderTemplate)?;
35
36        std::fs::write(dest_path, rendered).map_err(RendererError::WriteTemplate)?;
37
38        Ok(())
39    }
40}
41