From e0e82e654e08f9f0c39366db1dc48f005cb7146a Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 20 Aug 2026 21:06:28 -0600 Subject: [PATCH] fix: tolerate update records that omit the changes list The changes field was required, so a single record without it failed the whole response and emptied the updates list. A live instance returns five update records of which one has no changes key, so this is reachable rather than theoretical. This affects every servarr, since Update is shared. --- src/models/servarr_models.rs | 1 + src/models/servarr_models_tests.rs | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/models/servarr_models.rs b/src/models/servarr_models.rs index 71c74fb9..ef9d09a3 100644 --- a/src/models/servarr_models.rs +++ b/src/models/servarr_models.rs @@ -354,6 +354,7 @@ pub struct Update { pub installed: bool, pub latest: bool, pub installed_on: Option>, + #[serde(default)] pub changes: UpdateChanges, } diff --git a/src/models/servarr_models_tests.rs b/src/models/servarr_models_tests.rs index e57dac7d..52dd4f2f 100644 --- a/src/models/servarr_models_tests.rs +++ b/src/models/servarr_models_tests.rs @@ -4,6 +4,7 @@ mod tests { use crate::models::servarr_models::{ AuthenticationMethod, AuthenticationRequired, CertificateValidation, Indexer, QualityProfile, + Update, UpdateChanges, }; #[test] @@ -67,4 +68,26 @@ mod tests { assert_eq!(expected_quality_profile, quality_profile); } + + #[test] + fn test_update_deserializes_when_changes_is_absent() { + let update_json = r#"{ + "version": "0.4.18.2805", + "releaseDate": "2025-06-15T06:22:22Z", + "installed": false, + "latest": true, + "installedOn": "2025-06-22T05:09:11Z" + }"#; + + let update = serde_json::from_str::(update_json); + + assert_ok!(&update); + assert_eq!( + update.unwrap().changes, + UpdateChanges { + new: None, + fixed: None, + } + ); + } }