diff options
Diffstat (limited to 'common/src/helpers.rs')
| -rw-r--r-- | common/src/helpers.rs | 91 |
1 files changed, 90 insertions, 1 deletions
diff --git a/common/src/helpers.rs b/common/src/helpers.rs index 18b8e2b..44e9468 100644 --- a/common/src/helpers.rs +++ b/common/src/helpers.rs @@ -3,7 +3,9 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use std::ops::Deref; + +use crate::{CreditCategory, IdentifierType}; +use std::{fmt::Display, ops::Deref, str::FromStr}; #[derive(PartialEq)] pub struct SortAnyway<T>(pub T); @@ -29,3 +31,90 @@ impl<T> Deref for SortAnyway<T> { &self.0 } } + +impl Display for CreditCategory { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + CreditCategory::Cast => "cast", + CreditCategory::Writing => "writing", + CreditCategory::Directing => "directing", + CreditCategory::Art => "art", + CreditCategory::Sound => "sound", + CreditCategory::Camera => "camera", + CreditCategory::Lighting => "lighting", + CreditCategory::Crew => "crew", + CreditCategory::Editing => "editing", + CreditCategory::Production => "production", + CreditCategory::Vfx => "vfx", + CreditCategory::CostumeMakeup => "costume_makeup", + CreditCategory::CreatedBy => "created_by", + CreditCategory::Performance => "performance", + CreditCategory::Instrument => "instrument", + CreditCategory::Vocal => "vocal", + CreditCategory::Arranger => "arranger", + CreditCategory::Producer => "producer", + CreditCategory::Engineer => "engineer", + }) + } +} +impl FromStr for CreditCategory { + type Err = (); + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(match s { + "cast" => CreditCategory::Cast, + "writing" => CreditCategory::Writing, + "directing" => CreditCategory::Directing, + "art" => CreditCategory::Art, + "sound" => CreditCategory::Sound, + "camera" => CreditCategory::Camera, + "lighting" => CreditCategory::Lighting, + "crew" => CreditCategory::Crew, + "editing" => CreditCategory::Editing, + "production" => CreditCategory::Production, + "vfx" => CreditCategory::Vfx, + "costume_makeup" => CreditCategory::CostumeMakeup, + "created_by" => CreditCategory::CreatedBy, + "performance" => CreditCategory::Performance, + "instrument" => CreditCategory::Instrument, + "vocal" => CreditCategory::Vocal, + "arranger" => CreditCategory::Arranger, + "producer" => CreditCategory::Producer, + "engineer" => CreditCategory::Engineer, + _ => return Err(()), + }) + } +} +impl Display for IdentifierType { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + f.write_str(match self { + IdentifierType::MusicbrainzRecording => "musicbrainz_recording", + IdentifierType::MusicbrainzArtist => "musicbrainz_artist", + IdentifierType::MusicbrainzRelease => "musicbrainz_release", + IdentifierType::MusicbrainzReleaseGroup => "musicbrainz_release_group", + IdentifierType::Isrc => "isrc", + IdentifierType::Trakt => "trakt", + IdentifierType::Imdb => "imdb", + IdentifierType::Tmdb => "tmdb", + IdentifierType::Tvdb => "tvdb", + IdentifierType::Omdb => "omdb", + }) + } +} +impl FromStr for IdentifierType { + type Err = (); + fn from_str(s: &str) -> Result<Self, Self::Err> { + Ok(match s { + "musicbrainz_recording" => IdentifierType::MusicbrainzRecording, + "musicbrainz_artist" => IdentifierType::MusicbrainzArtist, + "musicbrainz_release" => IdentifierType::MusicbrainzRelease, + "musicbrainz_release_group" => IdentifierType::MusicbrainzReleaseGroup, + "isrc" => IdentifierType::Isrc, + "trakt" => IdentifierType::Trakt, + "imdb" => IdentifierType::Imdb, + "tmdb" => IdentifierType::Tmdb, + "tvdb" => IdentifierType::Tvdb, + "omdb" => IdentifierType::Omdb, + _ => return Err(()), + }) + } +} |