summaryrefslogtreecommitdiff
path: root/src/works
diff options
context:
space:
mode:
authorWriterV2 <primary-v2@protonmail.com>2022-09-04 18:12:55 +0200
committerWriterV2 <primary-v2@protonmail.com>2022-09-04 18:12:55 +0200
commit0ace78a01e59545953ef5be6ca6bcaa4a125a70b (patch)
treecba0424f103958a90b655f1ce33270cd5f15487d /src/works
parent236e0d464f6472a36f7e1f5dc0b0f71b26b8ecc3 (diff)
Add error context + comments
Diffstat (limited to 'src/works')
-rw-r--r--src/works/mod.rs22
-rw-r--r--src/works/stories.rs5
2 files changed, 24 insertions, 3 deletions
diff --git a/src/works/mod.rs b/src/works/mod.rs
index 8941542..8de16d7 100644
--- a/src/works/mod.rs
+++ b/src/works/mod.rs
@@ -1,19 +1,28 @@
-use anyhow::Result;
+use anyhow::{Context, Result};
use serde::{Deserialize, Serialize};
pub mod stories;
+// functionality for a group of work, e.g. stories or games
pub trait Works: for<'a> Deserialize<'a> + Serialize {
+ // create works from the corresponding JSON file,
+ // e.g. stories from stories.json
fn new_from_file(file: std::fs::File) -> Result<Self> {
- Ok(serde_json::from_reader(std::io::BufReader::new(file))?)
+ Ok(serde_json::from_reader(std::io::BufReader::new(&file))
+ // add error context
+ .with_context(|| format!("Failed to create works from {:?}", &file))?)
}
+ // crate tera context from the group of work
+ // tera context can be accessed in HTML tera templating
fn create_tera_context(&self) -> Result<tera::Context> {
let mut context = tera::Context::new();
context.insert("works", &self);
Ok(context)
}
+ // render corresponding overview HTML template
+ // with its tera context
fn render_overview_page(
&self,
tera_instance: &tera::Tera,
@@ -25,6 +34,13 @@ pub trait Works: for<'a> Deserialize<'a> + Serialize {
format!("{}.html", filename_without_extension).as_str(),
&self.create_tera_context()?,
)?,
- )?)
+ )
+ // add error context
+ .with_context(|| {
+ format!(
+ "Failed to render overview page for {:?}",
+ filename_without_extension
+ )
+ })?)
}
}
diff --git a/src/works/stories.rs b/src/works/stories.rs
index 73d89ad..e6f5427 100644
--- a/src/works/stories.rs
+++ b/src/works/stories.rs
@@ -1,5 +1,8 @@
use serde::{Deserialize, Serialize};
+// stories and their information
+// derive from JSON
+// process to context for HTML
#[derive(Debug, Deserialize, Serialize)]
pub struct Stories(pub Vec<Story>);
@@ -13,8 +16,10 @@ pub struct Story {
pub language: Language,
}
+// see src/works/mod.rs for information of Works trait
impl super::Works for Stories {}
+// language of story content
#[derive(Deserialize, Serialize, Debug)]
pub enum Language {
German,