refactor: Created a derive macro for defining the display style of Enum models and removed the use of the EnumDisplayStyle trait

This commit is contained in:
2025-03-06 15:29:30 -07:00
parent 7381eaef57
commit f97d46cec3
20 changed files with 305 additions and 271 deletions
+25 -50
View File
@@ -1,19 +1,19 @@
use std::fmt::{Display, Formatter};
use crate::{models::HorizontallyScrollableText, serde_enum_from};
use chrono::{DateTime, Utc};
use clap::ValueEnum;
use derivative::Derivative;
use enum_display_style_derive::EnumDisplayStyle;
use serde::{Deserialize, Serialize};
use serde_json::{Number, Value};
use strum_macros::EnumIter;
use crate::{models::HorizontallyScrollableText, serde_enum_from};
use strum_macros::{Display, EnumIter};
use super::servarr_models::{
DiskSpace, HostConfig, Indexer, Language, LogResponse, QualityProfile, QualityWrapper,
QueueEvent, RootFolder, SecurityConfig, Tag, Update,
};
use super::{EnumDisplayStyle, Serdeable};
use super::Serdeable;
#[cfg(test)]
#[path = "radarr_models_tests.rs"]
@@ -258,69 +258,44 @@ pub struct MediaInfo {
}
#[derive(
Serialize, Deserialize, Default, PartialEq, Eq, Clone, Copy, Debug, EnumIter, ValueEnum,
Serialize,
Deserialize,
Default,
PartialEq,
Eq,
Clone,
Copy,
Debug,
EnumIter,
ValueEnum,
Display,
EnumDisplayStyle,
)]
#[serde(rename_all = "camelCase")]
#[strum(serialize_all = "camelCase")]
pub enum MinimumAvailability {
#[default]
Announced,
#[display_style(name = "In Cinemas")]
InCinemas,
Released,
#[display_style(name = "TBA")]
Tba,
}
impl Display for MinimumAvailability {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let minimum_availability = match self {
MinimumAvailability::Tba => "tba",
MinimumAvailability::Announced => "announced",
MinimumAvailability::InCinemas => "inCinemas",
MinimumAvailability::Released => "released",
};
write!(f, "{minimum_availability}")
}
}
impl<'a> EnumDisplayStyle<'a> for MinimumAvailability {
fn to_display_str(self) -> &'a str {
match self {
MinimumAvailability::Tba => "TBA",
MinimumAvailability::Announced => "Announced",
MinimumAvailability::InCinemas => "In Cinemas",
MinimumAvailability::Released => "Released",
}
}
}
#[derive(Default, PartialEq, Eq, Clone, Copy, Debug, EnumIter, ValueEnum)]
#[derive(
Default, PartialEq, Eq, Clone, Copy, Debug, EnumIter, ValueEnum, Display, EnumDisplayStyle,
)]
#[strum(serialize_all = "camelCase")]
pub enum MovieMonitor {
#[default]
#[display_style(name = "Movie only")]
MovieOnly,
#[display_style(name = "Movie and Collection")]
MovieAndCollection,
None,
}
impl Display for MovieMonitor {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
let monitor = match self {
MovieMonitor::MovieOnly => "movieOnly",
MovieMonitor::MovieAndCollection => "movieAndCollection",
MovieMonitor::None => "none",
};
write!(f, "{monitor}")
}
}
impl<'a> EnumDisplayStyle<'a> for MovieMonitor {
fn to_display_str(self) -> &'a str {
match self {
MovieMonitor::MovieOnly => "Movie only",
MovieMonitor::MovieAndCollection => "Movie and Collection",
MovieMonitor::None => "None",
}
}
}
#[derive(Derivative, Serialize, Deserialize, Debug, Default, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Movie {