aboutsummaryrefslogtreecommitdiff
path: root/common/src/helpers.rs
diff options
context:
space:
mode:
Diffstat (limited to 'common/src/helpers.rs')
-rw-r--r--common/src/helpers.rs91
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(()),
+ })
+ }
+}