From f8e8e85cb09600f9adbc7e917bc3001ba7f26183 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Tue, 17 Mar 2026 14:16:16 +0100 Subject: [PATCH] feat(domain): add Weekday enum with From --- .../domain/src/value_objects/scheduling.rs | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/k-tv-backend/domain/src/value_objects/scheduling.rs b/k-tv-backend/domain/src/value_objects/scheduling.rs index 20f68d1..a70fdca 100644 --- a/k-tv-backend/domain/src/value_objects/scheduling.rs +++ b/k-tv-backend/domain/src/value_objects/scheduling.rs @@ -138,3 +138,55 @@ impl Default for RecyclePolicy { } } } + +/// Day of week, used as key in weekly schedule configs. +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)] +#[serde(rename_all = "lowercase")] +pub enum Weekday { + Monday, + Tuesday, + Wednesday, + Thursday, + Friday, + Saturday, + Sunday, +} + +impl From for Weekday { + fn from(w: chrono::Weekday) -> Self { + match w { + chrono::Weekday::Mon => Weekday::Monday, + chrono::Weekday::Tue => Weekday::Tuesday, + chrono::Weekday::Wed => Weekday::Wednesday, + chrono::Weekday::Thu => Weekday::Thursday, + chrono::Weekday::Fri => Weekday::Friday, + chrono::Weekday::Sat => Weekday::Saturday, + chrono::Weekday::Sun => Weekday::Sunday, + } + } +} + +impl Weekday { + pub fn all() -> [Weekday; 7] { + [ + Weekday::Monday, Weekday::Tuesday, Weekday::Wednesday, + Weekday::Thursday, Weekday::Friday, Weekday::Saturday, Weekday::Sunday, + ] + } +} + +#[cfg(test)] +mod weekday_tests { + use super::*; + + #[test] + fn from_chrono_weekday_roundtrip() { + assert_eq!(Weekday::from(chrono::Weekday::Mon), Weekday::Monday); + assert_eq!(Weekday::from(chrono::Weekday::Sun), Weekday::Sunday); + } + + #[test] + fn all_has_seven_days() { + assert_eq!(Weekday::all().len(), 7); + } +}