From 7b85b7e4287bb9e72f0d165ec9f694b594133a24 Mon Sep 17 00:00:00 2001 From: Amadeusz Wieczorek Date: Sun, 5 Jul 2026 14:19:50 -0700 Subject: [PATCH] Use default values for properties missing from --settings file --- cli/src/main.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index 36b93c5..d19e20b 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -122,7 +122,9 @@ fn main() -> io::Result<()> { let settings = { let mut settings = if let Some(path) = opt.settings { - serde_json::from_reader(File::open(path)?)? + let defaults = serde_json::to_value(Settings::default()).unwrap(); + let overrides = serde_json::from_reader(File::open(path)?)?; + serde_json::from_value(merge(defaults, overrides))? } else { Settings::default() }; @@ -384,3 +386,16 @@ fn main() -> io::Result<()> { ) } } + +fn merge(defaults: serde_json::Value, overrides: serde_json::Value) -> serde_json::Value { + match (defaults, overrides) { + (serde_json::Value::Object(mut defaults), serde_json::Value::Object(overrides)) => { + for (k, v) in overrides { + let existing = defaults.remove(&k).unwrap_or(serde_json::Value::Null); + defaults.insert(k, merge(existing, v)); + } + serde_json::Value::Object(defaults) + } + (_, overrides) => overrides, + } +}