use std::fmt;
use serde::Deserialize;
#[derive(Debug, Clone, Copy, PartialEq)]
#[repr(u8)]
pub enum AnimeGenre {
Action,
Adventure,
Cars,
Comedy,
Dementia,
Demons,
Drama,
Ecchi,
Fantasy,
Game,
Harem,
Historical,
Horror,
Josei,
Kids,
Magic,
MartialArts,
Mecha,
Military,
Music,
Mystery,
Parody,
Police,
Psychological,
Romance,
Samurai,
School,
SciFi,
Seinen,
Shoujo,
ShoujoAi,
Shounen,
ShounenAi,
SliceOfLife,
Space,
Sports,
SuperPower,
Supernatural,
Thriller,
Vampire,
Yaoi,
Yuri,
}
impl AnimeGenre {
pub fn as_str(&self) -> &'static str {
match self {
AnimeGenre::Action => "action",
AnimeGenre::Adventure => "adventure",
AnimeGenre::Cars => "cars",
AnimeGenre::Comedy => "comedy",
AnimeGenre::Dementia => "dementia",
AnimeGenre::Demons => "demons",
AnimeGenre::Drama => "drama",
AnimeGenre::Ecchi => "ecchi",
AnimeGenre::Fantasy => "fantasy",
AnimeGenre::Game => "game",
AnimeGenre::Harem => "harem",
AnimeGenre::Historical => "historical",
AnimeGenre::Horror => "horror",
AnimeGenre::Josei => "josei",
AnimeGenre::Kids => "kids",
AnimeGenre::Magic => "magic",
AnimeGenre::MartialArts => "martial-arts",
AnimeGenre::Mecha => "mecha",
AnimeGenre::Military => "military",
AnimeGenre::Music => "music",
AnimeGenre::Mystery => "mystery",
AnimeGenre::Parody => "parody",
AnimeGenre::Police => "police",
AnimeGenre::Psychological => "psychological",
AnimeGenre::Romance => "romance",
AnimeGenre::Samurai => "samurai",
AnimeGenre::School => "school",
AnimeGenre::SciFi => "sci-fi",
AnimeGenre::Seinen => "seinen",
AnimeGenre::Shoujo => "shoujo",
AnimeGenre::ShoujoAi => "shoujo-ai",
AnimeGenre::Shounen => "shounen",
AnimeGenre::ShounenAi => "shounen-ai",
AnimeGenre::SliceOfLife => "slice-of-life",
AnimeGenre::Space => "space",
AnimeGenre::Sports => "sports",
AnimeGenre::SuperPower => "super-power",
AnimeGenre::Supernatural => "supernatural",
AnimeGenre::Thriller => "thriller",
AnimeGenre::Vampire => "vampire",
AnimeGenre::Yaoi => "yaoi",
AnimeGenre::Yuri => "yuri",
}
}
}
impl fmt::Display for AnimeGenre {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[derive(Debug, Copy, Clone, PartialEq, Deserialize)]
#[repr(u8)]
pub enum AnimeType {
#[serde(rename(deserialize = "tv"))]
Tv,
#[serde(rename(deserialize = "special"))]
Special,
#[serde(rename(deserialize = "ova"))]
Ova,
#[serde(rename(deserialize = "movie"))]
Movie,
#[serde(rename(deserialize = "music video"))]
MusicVideo,
#[serde(rename(deserialize = "ona"))]
Ona,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_anime_genre_as_str_single_word() {
assert_eq!(AnimeGenre::Action.as_str(), "action");
assert_eq!(AnimeGenre::Horror.as_str(), "horror");
assert_eq!(AnimeGenre::Yuri.as_str(), "yuri");
}
#[test]
fn test_anime_genre_as_str_hyphenated() {
assert_eq!(AnimeGenre::MartialArts.as_str(), "martial-arts");
assert_eq!(AnimeGenre::SciFi.as_str(), "sci-fi");
assert_eq!(AnimeGenre::ShoujoAi.as_str(), "shoujo-ai");
assert_eq!(AnimeGenre::ShounenAi.as_str(), "shounen-ai");
assert_eq!(AnimeGenre::SliceOfLife.as_str(), "slice-of-life");
assert_eq!(AnimeGenre::SuperPower.as_str(), "super-power");
}
#[test]
fn test_anime_genre_display() {
assert_eq!(AnimeGenre::SliceOfLife.to_string(), "slice-of-life");
assert_eq!(AnimeGenre::SciFi.to_string(), "sci-fi");
}
}