use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum ShowStatus {
Returning,
Continuing,
Ended,
Canceled,
Hiatus,
}
impl fmt::Display for ShowStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let s = match self {
ShowStatus::Returning => "returning",
ShowStatus::Continuing => "continuing",
ShowStatus::Ended => "ended",
ShowStatus::Canceled => "canceled",
ShowStatus::Hiatus => "hiatus",
};
write!(f, "{}", s)
}
}
#[derive(Debug, Clone, Copy, PartialEq)]
#[repr(u8)]
pub enum TvGenre {
Action,
Adventure,
Animation,
AwardsShow,
Children,
Comedy,
Crime,
Documentary,
Drama,
Erotica,
Family,
Fantasy,
Food,
GameShow,
History,
HomeAndGarden,
Horror,
Indie,
KoreanDrama,
MartialArts,
MiniSeries,
Musical,
Mystery,
News,
Podcast,
Reality,
Romance,
ScienceFiction,
Soap,
SpecialInterest,
Sport,
Suspense,
TalkShow,
Thriller,
Travel,
War,
Western,
}
impl TvGenre {
pub fn as_str(&self) -> &'static str {
match self {
TvGenre::Action => "action",
TvGenre::Adventure => "adventure",
TvGenre::Animation => "animation",
TvGenre::AwardsShow => "awards-show",
TvGenre::Children => "children",
TvGenre::Comedy => "comedy",
TvGenre::Crime => "crime",
TvGenre::Documentary => "documentary",
TvGenre::Drama => "drama",
TvGenre::Erotica => "erotica",
TvGenre::Family => "family",
TvGenre::Fantasy => "fantasy",
TvGenre::Food => "food",
TvGenre::GameShow => "game-show",
TvGenre::History => "history",
TvGenre::HomeAndGarden => "home-and-garden",
TvGenre::Horror => "horror",
TvGenre::Indie => "indie",
TvGenre::KoreanDrama => "korean-drama",
TvGenre::MartialArts => "martial-arts",
TvGenre::MiniSeries => "mini-series",
TvGenre::Musical => "musical",
TvGenre::Mystery => "mystery",
TvGenre::News => "news",
TvGenre::Podcast => "podcast",
TvGenre::Reality => "reality",
TvGenre::Romance => "romance",
TvGenre::ScienceFiction => "science-fiction",
TvGenre::Soap => "soap",
TvGenre::SpecialInterest => "special-interest",
TvGenre::Sport => "sport",
TvGenre::Suspense => "suspense",
TvGenre::TalkShow => "talk-show",
TvGenre::Thriller => "thriller",
TvGenre::Travel => "travel",
TvGenre::War => "war",
TvGenre::Western => "western",
}
}
}
impl fmt::Display for TvGenre {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_tv_genre_as_str_single_word() {
assert_eq!(TvGenre::Action.as_str(), "action");
assert_eq!(TvGenre::Western.as_str(), "western");
assert_eq!(TvGenre::Food.as_str(), "food");
}
#[test]
fn test_tv_genre_as_str_hyphenated() {
assert_eq!(TvGenre::AwardsShow.as_str(), "awards-show");
assert_eq!(TvGenre::GameShow.as_str(), "game-show");
assert_eq!(TvGenre::HomeAndGarden.as_str(), "home-and-garden");
assert_eq!(TvGenre::KoreanDrama.as_str(), "korean-drama");
assert_eq!(TvGenre::MartialArts.as_str(), "martial-arts");
assert_eq!(TvGenre::MiniSeries.as_str(), "mini-series");
assert_eq!(TvGenre::ScienceFiction.as_str(), "science-fiction");
assert_eq!(TvGenre::SpecialInterest.as_str(), "special-interest");
assert_eq!(TvGenre::TalkShow.as_str(), "talk-show");
}
#[test]
fn test_tv_genre_display() {
assert_eq!(TvGenre::TalkShow.to_string(), "talk-show");
assert_eq!(TvGenre::ScienceFiction.to_string(), "science-fiction");
}
}