use std::fmt::{Display, Formatter, Result}; use chrono::{DateTime, Utc}; use clap::ValueEnum; use serde::{Deserialize, Serialize}; use serde_json::{Number, Value}; use super::HorizontallyScrollableText; #[cfg(test)] #[path = "servarr_models_tests.rs"] mod servarr_models_tests; #[derive(Default, Serialize, Debug, Clone, PartialEq, Eq)] pub struct AddRootFolderBody { pub path: String, } #[derive(Serialize, Deserialize, Default, PartialEq, Eq, Clone, Copy, Debug, ValueEnum)] #[serde(rename_all = "camelCase")] pub enum AuthenticationMethod { #[default] Basic, Forms, None, } impl Display for AuthenticationMethod { fn fmt(&self, f: &mut Formatter<'_>) -> Result { let authentication_method = match self { AuthenticationMethod::Basic => "basic", AuthenticationMethod::Forms => "forms", AuthenticationMethod::None => "none", }; write!(f, "{authentication_method}") } } #[derive(Serialize, Deserialize, Default, PartialEq, Eq, Clone, Copy, Debug, ValueEnum)] #[serde(rename_all = "camelCase")] pub enum AuthenticationRequired { Enabled, #[default] DisabledForLocalAddresses, } impl Display for AuthenticationRequired { fn fmt(&self, f: &mut Formatter<'_>) -> Result { let authentication_required = match self { AuthenticationRequired::Enabled => "enabled", AuthenticationRequired::DisabledForLocalAddresses => "disabledForLocalAddresses", }; write!(f, "{authentication_required}") } } #[derive(Serialize, Deserialize, Default, PartialEq, Eq, Clone, Copy, Debug, ValueEnum)] #[serde(rename_all = "camelCase")] pub enum CertificateValidation { #[default] Enabled, DisabledForLocalAddresses, Disabled, } impl Display for CertificateValidation { fn fmt(&self, f: &mut Formatter<'_>) -> Result { let certificate_validation = match self { CertificateValidation::Enabled => "enabled", CertificateValidation::DisabledForLocalAddresses => "disabledForLocalAddresses", CertificateValidation::Disabled => "disabled", }; write!(f, "{certificate_validation}") } } #[derive(Default, Serialize, Debug)] #[serde(rename_all = "camelCase")] pub struct CommandBody { pub name: String, } #[derive(Serialize, Deserialize, Debug, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct DiskSpace { #[serde(deserialize_with = "super::from_i64")] pub free_space: i64, #[serde(deserialize_with = "super::from_i64")] pub total_space: i64, } #[derive(Default, Clone, Serialize, Debug, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct EditIndexerParams { pub indexer_id: i64, pub name: Option, pub enable_rss: Option, pub enable_automatic_search: Option, pub enable_interactive_search: Option, pub url: Option, pub api_key: Option, pub seed_ratio: Option, pub tags: Option>, pub priority: Option, pub clear_tags: bool, } #[derive(Default, Deserialize, Serialize, Debug, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct HostConfig { pub bind_address: HorizontallyScrollableText, #[serde(deserialize_with = "super::from_i64")] pub port: i64, pub url_base: Option, pub instance_name: Option, pub application_url: Option, pub enable_ssl: bool, #[serde(deserialize_with = "super::from_i64")] pub ssl_port: i64, pub ssl_cert_path: Option, pub ssl_cert_password: Option, } #[derive(Default, Deserialize, Serialize, Debug, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Indexer { #[serde(deserialize_with = "super::from_i64")] pub id: i64, pub name: Option, pub implementation: Option, pub implementation_name: Option, pub config_contract: Option, pub supports_rss: bool, pub supports_search: bool, pub fields: Option>, pub enable_rss: bool, pub enable_automatic_search: bool, pub enable_interactive_search: bool, pub protocol: String, #[serde(deserialize_with = "super::from_i64")] pub priority: i64, #[serde(deserialize_with = "super::from_i64")] pub download_client_id: i64, pub tags: Vec, } #[derive(Default, Deserialize, Serialize, Debug, Clone, Eq, PartialEq)] pub struct IndexerField { pub name: Option, pub value: Option, } #[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Ord, PartialOrd)] pub struct Language { #[serde(deserialize_with = "super::from_i64")] pub id: i64, pub name: String, } #[derive(Default, Serialize, Deserialize, Clone, Debug, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct Log { pub time: DateTime, pub exception: Option, pub exception_type: Option, pub level: String, pub logger: Option, pub message: Option, pub method: Option, } #[derive(Default, Clone, Serialize, Deserialize, Debug, Eq, PartialEq)] pub struct LogResponse { pub records: Vec, } #[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Ord, PartialOrd)] pub struct Quality { pub name: String, } #[derive(Default, Clone, Serialize, Deserialize, Debug, PartialEq, Eq)] pub struct QualityProfile { #[serde(deserialize_with = "super::from_i64")] pub id: i64, pub name: String, } impl From<(&i64, &String)> for QualityProfile { fn from(value: (&i64, &String)) -> Self { QualityProfile { id: *value.0, name: value.1.clone(), } } } #[derive(Serialize, Deserialize, Default, Debug, Clone, PartialEq, Eq, Ord, PartialOrd)] pub struct QualityWrapper { pub quality: Quality, } #[derive(Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct QueueEvent { pub trigger: String, pub name: String, pub command_name: String, pub status: String, pub queued: DateTime, pub started: Option>, pub ended: Option>, pub duration: Option, } #[derive(Default, Serialize, Deserialize, Debug, Clone, Eq, PartialEq)] #[serde(rename_all = "camelCase")] pub struct RootFolder { #[serde(deserialize_with = "super::from_i64")] pub id: i64, pub path: String, pub accessible: bool, #[serde(deserialize_with = "super::from_i64")] pub free_space: i64, pub unmapped_folders: Option>, } #[derive(Default, Serialize, Deserialize, Clone, Debug, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct SecurityConfig { pub authentication_method: AuthenticationMethod, #[serde(skip_serializing_if = "Option::is_none")] pub authentication_required: Option, #[serde(skip_serializing_if = "Option::is_none")] pub username: Option, #[serde(skip_serializing_if = "Option::is_none")] pub password: Option, pub api_key: String, pub certificate_validation: CertificateValidation, } #[derive(Default, Clone, Serialize, Deserialize, Debug, PartialEq, Eq)] pub struct Tag { #[serde(deserialize_with = "super::from_i64")] pub id: i64, pub label: String, } #[derive(Serialize, Deserialize, Default, Debug, Clone, Eq, PartialEq)] pub struct UnmappedFolder { pub name: String, pub path: String, } #[derive(Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct Update { pub version: String, pub release_date: DateTime, pub installed: bool, pub latest: bool, pub installed_on: Option>, pub changes: UpdateChanges, } #[derive(Default, Serialize, Deserialize, Debug, Clone, PartialEq, Eq)] #[serde(rename_all = "camelCase")] pub struct UpdateChanges { pub new: Option>, pub fixed: Option>, }