From 90ceb2124e75e68c7cf0a3d0102c20bb64126e16 Mon Sep 17 00:00:00 2001 From: Olivia Brooks <109807080+Cutieguwu@users.noreply.github.com> Date: Wed, 15 Oct 2025 12:40:52 -0400 Subject: [PATCH] Module restructure --- src/{blog.rs => blog/meta.rs} | 58 +++++++++++++++++------------------ src/blog/mod.rs | 6 ++++ src/{ => blog}/og.rs | 2 ++ src/blog/res.rs | 25 +++++++++++++++ src/main.rs | 25 ++++++--------- 5 files changed, 70 insertions(+), 46 deletions(-) rename src/{blog.rs => blog/meta.rs} (80%) create mode 100644 src/blog/mod.rs rename src/{ => blog}/og.rs (94%) create mode 100644 src/blog/res.rs diff --git a/src/blog.rs b/src/blog/meta.rs similarity index 80% rename from src/blog.rs rename to src/blog/meta.rs index a8bbbfd..3217117 100644 --- a/src/blog.rs +++ b/src/blog/meta.rs @@ -1,17 +1,28 @@ -use crate::error; -use std; -use std::fs::File; -use std::path::{Path, PathBuf}; +use std::{ + fs::File, + path::{Path, PathBuf}, +}; -use chrono::NaiveDate; use ron::error::SpannedResult; -use serde::{Deserialize, Deserializer, de::DeserializeOwned}; +use serde::{Deserialize, de::DeserializeOwned}; -const SANE_DATE_FORMAT: &str = "%Y-%m-%d"; +use super::{ + og, + res::{Date, Image}, +}; +use crate::error; pub static FALLBACK_META_PATH: std::sync::OnceLock = std::sync::OnceLock::new(); static FALLBACK_META: std::sync::OnceLock = std::sync::OnceLock::new(); +/// Fallback Meta Setup +pub fn load_fb_meta>(path: P) { + FALLBACK_META_PATH.get_or_init(|| path.as_ref().to_path_buf()); + + // Trigger OnceLock loading of fallback_meta path. + Meta::default(); +} + /// Make sure to populate `FALLBACK_META_PATH` before constructing a `Meta`. /// /// `MetaFallback` is the same as `Meta`, but without a `Default` impl. @@ -24,10 +35,15 @@ pub struct Meta { site_name: String, locale: String, + // `type` is a keyword, this gets around that limitation. + // + // Trailing underscore is apparently a semi-common practice for this, as + // prefixed underscore is reserved by the compiler to indicate + // intentionally unused assignments. #[serde(rename = "type")] - type_: String, // `type` is a keyword, this gets around that limitation. + type_: String, - authors: Vec, + authors: Vec, date: Date, image: Option, } @@ -60,7 +76,7 @@ struct MetaFallback { #[serde(rename = "type")] type_: String, // `type` is a keyword, this gets around that limitation. - authors: Vec, + authors: Vec, date: Date, image: Option, } @@ -105,6 +121,7 @@ fn meta_try_from_file(file: File) -> SpannedResult { .from_reader(file) } +// TryFrom impl TryFrom for Meta { type Error = error::MetaError; @@ -121,6 +138,7 @@ impl TryFrom for MetaFallback { } } +// TryFrom<&Path> impl TryFrom<&Path> for Meta { type Error = error::MetaError; @@ -144,23 +162,3 @@ impl TryFrom<&Path> for MetaFallback { ) } } - -#[derive(Clone, Debug, Deserialize)] -pub struct Image(String); - -#[derive(Clone, Debug, Deserialize, Default)] -#[serde(default)] -pub struct Date { - #[serde(deserialize_with = "naive_date_from_str")] - posted: NaiveDate, - #[serde(deserialize_with = "naive_date_from_str")] - modified: NaiveDate, -} - -fn naive_date_from_str<'de, D>(deserializer: D) -> Result -where - D: Deserializer<'de>, -{ - NaiveDate::parse_from_str(Deserialize::deserialize(deserializer)?, SANE_DATE_FORMAT) - .map_err(serde::de::Error::custom) -} diff --git a/src/blog/mod.rs b/src/blog/mod.rs new file mode 100644 index 0000000..66bd977 --- /dev/null +++ b/src/blog/mod.rs @@ -0,0 +1,6 @@ +mod meta; +pub mod og; +mod res; + +#[allow(unused_imports)] +pub use meta::{FALLBACK_META_PATH, Meta, load_fb_meta}; diff --git a/src/og.rs b/src/blog/og.rs similarity index 94% rename from src/og.rs rename to src/blog/og.rs index 12a7516..6171197 100644 --- a/src/og.rs +++ b/src/blog/og.rs @@ -20,12 +20,14 @@ impl Into for Gender { } } +#[allow(dead_code)] #[derive(Clone, Debug, Deserialize)] pub struct Author { name: Name, gender: Gender, } +#[allow(dead_code)] #[derive(Clone, Debug, Deserialize)] pub enum Name { FirstOnly { diff --git a/src/blog/res.rs b/src/blog/res.rs new file mode 100644 index 0000000..29cfa66 --- /dev/null +++ b/src/blog/res.rs @@ -0,0 +1,25 @@ +use chrono::NaiveDate; +use serde::{Deserialize, Deserializer}; + +const SANE_DATE_FORMAT: &str = "%Y-%m-%d"; + +#[allow(dead_code)] +#[derive(Clone, Debug, Deserialize)] +pub struct Image(String); + +#[derive(Clone, Debug, Deserialize, Default)] +#[serde(default)] +pub struct Date { + #[serde(deserialize_with = "naive_date_from_str")] + posted: NaiveDate, + #[serde(deserialize_with = "naive_date_from_str")] + modified: NaiveDate, +} + +fn naive_date_from_str<'de, D>(deserializer: D) -> Result +where + D: Deserializer<'de>, +{ + NaiveDate::parse_from_str(Deserialize::deserialize(deserializer)?, SANE_DATE_FORMAT) + .map_err(serde::de::Error::custom) +} diff --git a/src/main.rs b/src/main.rs index b44919b..0b6732e 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,17 +2,15 @@ mod blog; mod cli; mod convert; mod error; -mod og; +mod lock; -use std::path::PathBuf; - -use crate::blog::Meta; -use crate::cli::Commands; +use crate::blog::load_fb_meta; +use crate::cli::{Cli, Commands}; use clap::Parser; fn main() { - let config = cli::Cli::parse(); + let config = Cli::parse(); dbg!(&config); @@ -23,12 +21,16 @@ fn main() { meta, post_md, template_html, - } => (), + } => { + load_fb_meta(fallback_meta); + } Commands::Update { lockfile } => (), Commands::Refresh { lockfile, scope } => (), Commands::Clean => (), } + //println!("Loaded FallbackMeta"); + /* load_fb_meta(&config); @@ -52,12 +54,3 @@ fn main() { .expect("Failed to deserialize single_meta file"); */ } - -/// Fallback Meta Setup -fn load_fb_meta(path: PathBuf) { - blog::FALLBACK_META_PATH.get_or_init(|| path); - - // Trigger OnceLock loading of fallback_meta path. - Meta::default(); - println!("Loaded FallbackMeta"); -}