diff options
| -rw-r--r-- | Cargo.toml | 3 | ||||
| -rw-r--r-- | src/main.rs | 38 | ||||
| -rw-r--r-- | src/works/mod.rs | 12 |
3 files changed, 17 insertions, 36 deletions
@@ -6,6 +6,7 @@ edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -tera = "1" +tera = "1.17" serde = {version = "1.0", features = ["derive"]} serde_json = "1.0" +anyhow = "1.0" diff --git a/src/main.rs b/src/main.rs index 7f658ef..4af487e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,42 +1,24 @@ +use anyhow::Result; use tera::{Context, Tera}; use crate::works::Works; mod works; -fn main() { - let tera = match Tera::new("templates/**/*.html") { - Ok(t) => t, - Err(e) => { - println!("Parsing error(s): {}", e); - ::std::process::exit(1); - } - }; +fn main() -> Result<()> { + let tera = Tera::new("templates/**/*.html")?; let context = Context::new(); - let output = tera - .render("index.html", &context) - .expect("Failed to render index.html"); + let output = tera.render("index.html", &context)?; - std::fs::write("docs/index.html", output) - .expect("Failed to write rendered output to index.html"); - - let file = match std::fs::File::open(std::path::PathBuf::from("stories.json")) { - Ok(file) => file, - Err(err) => panic!("Trying to open stories.json in readmode - {:?}", err), - }; + std::fs::write("docs/index.html", output)?; + let file = std::fs::File::open(std::path::PathBuf::from("stories.json"))?; let stories = works::stories::Stories::new_from_file(file); - println!("Stories: {:?}\n", stories); - - let context = stories.create_tera_context(); - println!("Context: {:?}\n", context); - - let stories_html_output = tera - .render("stories.html", &context) - .expect("Failed to render stories.html"); + let context = stories?.create_tera_context(); - std::fs::write("docs/stories.html", stories_html_output) - .expect("Failed to write rendered output to stories.html"); + let stories_html_output = tera.render("stories.html", &context?)?; + std::fs::write("docs/stories.html", stories_html_output)?; + Ok(()) } diff --git a/src/works/mod.rs b/src/works/mod.rs index f062565..cfd302d 100644 --- a/src/works/mod.rs +++ b/src/works/mod.rs @@ -1,18 +1,16 @@ +use anyhow::Result; use serde::{Deserialize, Serialize}; pub mod stories; pub trait Works: for<'a> Deserialize<'a> + Serialize { - fn new_from_file(file: std::fs::File) -> Self { - match serde_json::from_reader(std::io::BufReader::new(file)) { - Ok(work) => work, - Err(err) => panic!("Trying to create work from JSON File - {:?}", err), - } + fn new_from_file(file: std::fs::File) -> Result<Self> { + Ok(serde_json::from_reader(std::io::BufReader::new(file))?) } - fn create_tera_context(&self) -> tera::Context { + fn create_tera_context(&self) -> Result<tera::Context> { let mut context = tera::Context::new(); context.insert("works", &self); - context + Ok(context) } } |
