use julid::Julid; use serde::{Deserialize, Serialize}; pub mod handlers; pub mod templates; #[derive( Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, sqlx::Type, )] #[repr(i8)] pub enum ShowKind { Movie = 0, Series = 1, LimitedSeries = 2, Short = 3, Unknown = 4, Other = 5, } impl std::fmt::Display for ShowKind { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { let repr = match self { Self::Movie => "movie", Self::Series => "series", Self::LimitedSeries => "limited series", Self::Short => "short form", Self::Other => "other", Self::Unknown => "unknown", }; write!(f, "{repr}") } } impl Default for ShowKind { fn default() -> Self { Self::Unknown } } impl From for ShowKind { fn from(value: i64) -> Self { match value { 0 => Self::Movie, 1 => Self::Series, 2 => Self::LimitedSeries, 3 => Self::Short, 4 => Self::Unknown, 5 => Self::Other, _ => Self::Unknown, } } } //-************************************************************************ /// Something able to be watched. //-************************************************************************ #[derive( Debug, Default, Clone, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, sqlx::FromRow, )] pub struct Watch { pub id: Julid, pub title: String, pub kind: ShowKind, pub metadata_url: Option, pub length: Option, pub release_date: Option, pub added_by: Julid, // this shouldn't be exposed to randos in the application } //-************************************************************************ /// Something a user wants to watch //-************************************************************************ #[derive( Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize, sqlx::FromRow, )] pub struct WatchQuest { pub user: Julid, pub watch: Julid, pub public: bool, pub watched: bool, } #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] pub struct QuestId { pub user: Julid, pub watch: Julid, } impl WatchQuest { pub fn id(&self) -> QuestId { QuestId { user: self.user, watch: self.watch, } } }