From f5bae233f7f77d0d627a4237403e4f5970ef9f3e Mon Sep 17 00:00:00 2001 From: akorchyn Date: Mon, 13 Jan 2025 13:27:57 +0200 Subject: [PATCH] review --- src/config/migrations.rs | 10 ++++++++++ src/config/mod.rs | 17 ++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/config/migrations.rs b/src/config/migrations.rs index 7574c1ed2..12719c4aa 100644 --- a/src/config/migrations.rs +++ b/src/config/migrations.rs @@ -123,3 +123,13 @@ pub enum ConfigVersion { #[serde(rename = "3")] V3(ConfigV3), } + +impl ConfigVersion { + pub fn is_latest_version(&self) -> bool { + // Used match instead of matches! to compile fail if new version is added + match self { + ConfigVersion::V3(_) => true, + ConfigVersion::V2(_) | ConfigVersion::V1(_) => false, + } + } +} diff --git a/src/config/mod.rs b/src/config/mod.rs index 48b9f5377..b8ae7049f 100644 --- a/src/config/mod.rs +++ b/src/config/mod.rs @@ -99,15 +99,12 @@ impl Config { } })?; - let config = match config_version { - migrations::ConfigVersion::V3(config) => config, - _ => { - eprintln!("Migrating config.toml to the latest version..."); - let config: Config = config_version.into(); - Self::write_config_toml(config.clone())?; - config - } - }; + let is_latest_version = config_version.is_latest_version(); + let config: Config = config_version.into(); + + if !is_latest_version { + Self::write_config_toml(config.clone())?; + } Ok(config) } else { @@ -200,9 +197,11 @@ impl From for Config { loop { config_version = match config_version { migrations::ConfigVersion::V1(config_v1) => { + eprintln!("Migrating config.toml from V1 to V2..."); migrations::ConfigVersion::V2(config_v1.into()) } migrations::ConfigVersion::V2(config_v2) => { + eprintln!("Migrating config.toml from V2 to V3..."); migrations::ConfigVersion::V3(config_v2.into()) } migrations::ConfigVersion::V3(config_v3) => {