From 714847218d6aee5a1364002ab61876ab6d7f284c Mon Sep 17 00:00:00 2001 From: Kazuya Takei Date: Wed, 20 Mar 2024 21:36:35 +0900 Subject: [PATCH] refactor: Delegate generationg config to `require_config` --- src/commands.rs | 14 +++++++++++++- src/commands/info.rs | 22 +++++++++++----------- src/config.rs | 4 ++-- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/commands.rs b/src/commands.rs index 08153ee..c70d853 100644 --- a/src/commands.rs +++ b/src/commands.rs @@ -5,9 +5,11 @@ mod minor; mod patch; mod update; -use anyhow::Result; +use anyhow::{anyhow, Result}; use clap::{Parser, Subcommand}; +use crate::config; + #[derive(Parser)] #[command(version, about, long_about = None)] struct Cli { @@ -31,6 +33,16 @@ enum Commands { Init(init::Arguments), } +/** + * Resolve valid configuration file and parse struct. + */ +fn require_config() -> Result { + if config::find_config_path().is_none() { + return Err(anyhow!("Configuratio file is not exists.")); + } + return Ok(config::load_config().unwrap()); +} + pub fn run_command() -> Result<()> { let cli = Cli::parse(); match &cli.command { diff --git a/src/commands/info.rs b/src/commands/info.rs index 24c2a3f..731d717 100644 --- a/src/commands/info.rs +++ b/src/commands/info.rs @@ -1,39 +1,39 @@ /* 'info' command displays data from config-file. */ -use crate::config; +use crate::commands::require_config; use crate::versioning; -use anyhow::{anyhow, Result}; +use anyhow::Result; use clap::Args; #[derive(Args)] pub(crate) struct Arguments {} pub(crate) fn execute(_args: &Arguments) -> Result<()> { - if config::find_config_path().is_none() { - return Err(anyhow!("Configuratio file is not exists.")); + let config = require_config(); + if config.is_err() { + return Err(config.unwrap_err()); } - // Load config file. - let config_data = config::load_config().unwrap(); + let config = config.unwrap(); println!("# Version info"); println!(); - println!("- Current: {}", config_data.current_version); + println!("- Current: {}", config.current_version); println!( "- Next major: {}", - versioning::up_major(&config_data.current_version) + versioning::up_major(&config.current_version) ); println!( "- Next minor: {}", - versioning::up_minor(&config_data.current_version) + versioning::up_minor(&config.current_version) ); println!( "- Next patch: {}", - versioning::up_patch(&config_data.current_version) + versioning::up_patch(&config.current_version) ); println!(); println!("# Replace targets"); println!(); - for f in config_data.get_files() { + for f in config.get_files() { println!("- {}", f.path.to_str().unwrap()) } // Display infomation data. diff --git a/src/config.rs b/src/config.rs index 2137354..70176dd 100644 --- a/src/config.rs +++ b/src/config.rs @@ -16,13 +16,13 @@ search = "version = \"{{current_version}}\"" replace = "version = \"{{new_version}}\"" "#; -#[derive(Clone, Serialize, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct Config { pub current_version: Version, files: Vec, } -#[derive(Clone, Serialize, Deserialize)] +#[derive(Clone, Debug, Serialize, Deserialize)] pub struct FileConfig { pub path: PathBuf, pub search: String,