feat(cli): Added sonarr support for listing downloads, listing quality profiles, and fetching detailed information about an episode

This commit is contained in:
2024-11-15 18:41:13 -07:00
parent e14b7072c6
commit 003f319385
10 changed files with 201 additions and 11 deletions
+8
View File
@@ -56,6 +56,12 @@ pub struct DownloadRecord {
pub download_client: String,
}
#[derive(Default, Clone, Serialize, Deserialize, Debug, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct DownloadsResponse {
pub records: Vec<DownloadRecord>,
}
#[derive(Default, Serialize, Deserialize, Hash, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct Episode {
@@ -321,6 +327,7 @@ impl SeriesStatus {
#[allow(clippy::large_enum_variant)]
pub enum SonarrSerdeable {
Value(Value),
DownloadsResponse(DownloadsResponse),
Episode(Episode),
Episodes(Vec<Episode>),
QualityProfiles(Vec<QualityProfile>),
@@ -345,6 +352,7 @@ impl From<()> for SonarrSerdeable {
serde_enum_from!(
SonarrSerdeable {
Value(Value),
DownloadsResponse(DownloadsResponse),
Episode(Episode),
Episodes(Vec<Episode>),
QualityProfiles(Vec<QualityProfile>),
+18 -2
View File
@@ -5,8 +5,8 @@ mod tests {
use crate::models::{
sonarr_models::{
BlocklistItem, BlocklistResponse, Episode, Log, LogResponse, QualityProfile, Series,
SeriesStatus, SeriesType, SonarrSerdeable, SystemStatus,
BlocklistItem, BlocklistResponse, DownloadRecord, DownloadsResponse, Episode, Log,
LogResponse, QualityProfile, Series, SeriesStatus, SeriesType, SonarrSerdeable, SystemStatus,
},
Serdeable,
};
@@ -145,6 +145,22 @@ mod tests {
);
}
#[test]
fn test_sonarr_serdeable_from_downloads_response() {
let downloads_response = DownloadsResponse {
records: vec![DownloadRecord {
id: 1,
..DownloadRecord::default()
}],
};
let sonarr_serdeable: SonarrSerdeable = downloads_response.clone().into();
assert_eq!(
sonarr_serdeable,
SonarrSerdeable::DownloadsResponse(downloads_response)
);
}
#[test]
fn test_sonarr_serdeable_from_log_response() {
let log_response = LogResponse {