From 5d6943eca8f60e5a7b1422f9c9be2ca93b52104f Mon Sep 17 00:00:00 2001 From: WriterV2 Date: Tue, 23 Aug 2022 17:10:09 +0200 Subject: Add Works trait & implement it for Stories --- src/main.rs | 12 ++++++++++++ src/stories.rs | 0 src/works/mod.rs | 12 ++++++++++++ src/works/stories.rs | 21 +++++++++++++++++++++ 4 files changed, 45 insertions(+) delete mode 100644 src/stories.rs create mode 100644 src/works/mod.rs create mode 100644 src/works/stories.rs (limited to 'src') diff --git a/src/main.rs b/src/main.rs index 81c2c61..b3e907d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,9 @@ use tera::{Context, Tera}; +use self::works::Work; + +mod works; + fn main() { let tera = match Tera::new("templates/**/*.html") { Ok(t) => t, @@ -17,4 +21,12 @@ fn main() { std::fs::write("docs/index.html", output) .expect("Failed to write rendered output to index.html"); + + let mut 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), + }; + + let stories = works::stories::Stories::new_from_file(file); + println!("Stories: {:?}", stories); } diff --git a/src/stories.rs b/src/stories.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/works/mod.rs b/src/works/mod.rs new file mode 100644 index 0000000..ab7bcf5 --- /dev/null +++ b/src/works/mod.rs @@ -0,0 +1,12 @@ +use serde::Deserialize; + +pub mod stories; + +pub trait Works: for<'a> Deserialize<'a> { + 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), + } + } +} diff --git a/src/works/stories.rs b/src/works/stories.rs new file mode 100644 index 0000000..b437fb4 --- /dev/null +++ b/src/works/stories.rs @@ -0,0 +1,21 @@ +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct Stories(pub Vec); + +#[derive(Debug, Deserialize)] +pub struct Story { + pub title: String, + pub description: String, + pub path_to_document: String, + pub slug: String, + pub language: Language, +} + +impl super::Works for Stories {} + +#[derive(Deserialize, Debug)] +pub enum Language { + German, + English, +} -- cgit v1.2.3