use serde::{Deserialize, Serialize}; #[derive(Debug, Serialize, Deserialize, Clone)] pub struct BibleVerse { pub text: String, pub reference: String, #[serde(skip_serializing_if = "Option::is_none")] pub version: Option, #[serde(skip_serializing_if = "Option::is_none")] pub book: Option, #[serde(skip_serializing_if = "Option::is_none")] pub chapter: Option, #[serde(skip_serializing_if = "Option::is_none")] pub verse: Option, #[serde(skip_serializing_if = "Option::is_none")] pub category: Option, } #[derive(Debug, Serialize, Deserialize, Clone)] pub struct VerseOfTheDay { pub verse: BibleVerse, pub date: chrono::NaiveDate, #[serde(skip_serializing_if = "Option::is_none")] pub commentary: Option, #[serde(skip_serializing_if = "Option::is_none")] pub theme: Option, } #[derive(Debug, Serialize, Deserialize, Clone, PartialEq)] pub enum VerseCategory { #[serde(rename = "comfort")] Comfort, #[serde(rename = "hope")] Hope, #[serde(rename = "faith")] Faith, #[serde(rename = "love")] Love, #[serde(rename = "peace")] Peace, #[serde(rename = "strength")] Strength, #[serde(rename = "wisdom")] Wisdom, #[serde(rename = "guidance")] Guidance, #[serde(rename = "forgiveness")] Forgiveness, #[serde(rename = "salvation")] Salvation, #[serde(rename = "prayer")] Prayer, #[serde(rename = "praise")] Praise, #[serde(rename = "thanksgiving")] Thanksgiving, #[serde(rename = "other")] Other, } impl BibleVerse { pub fn new(text: String, reference: String) -> Self { Self { text, reference, version: None, book: None, chapter: None, verse: None, category: None, } } pub fn with_version(mut self, version: String) -> Self { self.version = Some(version); self } pub fn with_book(mut self, book: String) -> Self { self.book = Some(book); self } pub fn with_location(mut self, chapter: u32, verse: u32) -> Self { self.chapter = Some(chapter); self.verse = Some(verse); self } pub fn with_category(mut self, category: VerseCategory) -> Self { self.category = Some(category); self } } impl VerseOfTheDay { pub fn new(verse: BibleVerse, date: chrono::NaiveDate) -> Self { Self { verse, date, commentary: None, theme: None, } } pub fn with_commentary(mut self, commentary: String) -> Self { self.commentary = Some(commentary); self } pub fn with_theme(mut self, theme: String) -> Self { self.theme = Some(theme); self } } impl VerseCategory { pub fn display_name(&self) -> &'static str { match self { VerseCategory::Comfort => "Comfort", VerseCategory::Hope => "Hope", VerseCategory::Faith => "Faith", VerseCategory::Love => "Love", VerseCategory::Peace => "Peace", VerseCategory::Strength => "Strength", VerseCategory::Wisdom => "Wisdom", VerseCategory::Guidance => "Guidance", VerseCategory::Forgiveness => "Forgiveness", VerseCategory::Salvation => "Salvation", VerseCategory::Prayer => "Prayer", VerseCategory::Praise => "Praise", VerseCategory::Thanksgiving => "Thanksgiving", VerseCategory::Other => "Other", } } }