diff options
| -rw-r--r-- | mullvad-update/src/format/mod.rs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/mullvad-update/src/format/mod.rs b/mullvad-update/src/format/mod.rs index 61fac6a8c2..eaa6a6de00 100644 --- a/mullvad-update/src/format/mod.rs +++ b/mullvad-update/src/format/mod.rs @@ -62,6 +62,7 @@ pub struct Release { pub installers: Vec<Installer>, /// Fraction of users that should receive the new version #[serde(default = "default_rollout")] + #[serde(skip_serializing_if = "is_default_rollout")] pub rollout: f32, } @@ -70,6 +71,10 @@ fn default_rollout() -> f32 { 1. } +fn is_default_rollout(b: impl std::borrow::Borrow<f32>) -> bool { + (b.borrow() - default_rollout()).abs() < f32::EPSILON +} + /// App installer #[derive(Debug, Deserialize, Serialize, Clone)] pub struct Installer { @@ -99,3 +104,49 @@ pub struct ResponseSignature { pub keyid: key::VerifyingKey, pub sig: key::Signature, } + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_default_rollout_serialize() { + // rollout should not be serialized if equal to default value + let serialized = serde_json::to_value(Release { + version: "2024.1".parse().unwrap(), + changelog: "".to_owned(), + installers: vec![], + rollout: default_rollout(), + }) + .unwrap(); + + assert_eq!( + serialized, + serde_json::json!({ + "version": "2024.1", + "changelog": "", + "installers": [], + }) + ); + + // rollout *should* be serialized if not equal to default value + let rollout = 0.99; + let serialized = serde_json::to_value(Release { + version: "2024.1".parse().unwrap(), + changelog: "".to_owned(), + installers: vec![], + rollout, + }) + .unwrap(); + + assert_eq!( + serialized, + serde_json::json!({ + "version": "2024.1", + "changelog": "", + "installers": [], + "rollout": rollout, + }) + ); + } +} |
