From f6a02d2f3c96db0274915d0d1be28a711e9a3821 Mon Sep 17 00:00:00 2001 From: WriterV2 Date: Tue, 5 May 2026 17:12:34 +0200 Subject: Update story data --- src/main.rs | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 1108c23..d7df3f6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ use anyhow::{Context, Result}; use maud::{html, Markup}; use serde::Deserialize; +use toml::value::Date; use self::page::Page; @@ -23,21 +24,65 @@ impl page::Page for Vec { } ) } + + fn prepare_content(&self) -> Result<()> { + for story in self { + std::fs::copy(&story.path, story.format_local_pdf_path())?; + } + Ok(()) + } +} + +#[derive(Deserialize, Debug)] +enum StoryLanguage { + German, + English, +} + +impl std::fmt::Display for StoryLanguage { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + write!(f, "{:?}", self) + } } #[derive(Deserialize)] struct Story { name: String, description: String, + language: StoryLanguage, + upload_date: Date, + update_date: Option, + path: String, } impl Story { fn render_as_card(self) -> Markup { html!(card { - span { (self.name) } - span { (self.description) } + h2 { + span { (self.name) } + } + p { (self.description) } br + span { "Language: " (self.language) } + span { "Uploaded on: " (self.upload_date) } + @if let Some(update_date) = self.update_date { + span { "Updated on: " (update_date) } + } + br {} + a href=(&self.format_pdf_path()) download + { + "PDF" + } }) } + + fn format_pdf_path(&self) -> String { + let snake_case_name = self.name.to_lowercase().replace(" ", "_"); + format!("stories/{}.pdf", snake_case_name) + } + + fn format_local_pdf_path(&self) -> String { + format!("dist/{}", self.format_pdf_path()) + } } fn main() -> Result<()> { -- cgit v1.2.3