From 331986f18e7e6fd632b0359efab60ff5af5ed4d3 Mon Sep 17 00:00:00 2001 From: YouKnow Date: Sat, 10 Feb 2024 04:50:05 +0330 Subject: [PATCH] Refactor HZD language parsing in CLI - Move shared HZD language parsing logic to new parse_hzd_languages function in shared.rs - Update functions calling language parsing to use new shared function - Allow passing "all" to export/import all languages - Bump version to 0.1.1 --- Cargo.lock | 2 +- dloc-cli/Cargo.toml | 2 +- dloc-cli/src/commands/group.rs | 19 +++---------------- dloc-cli/src/commands/shared.rs | 21 +++++++++++++++++++-- dloc-cli/src/commands/single.rs | 19 +++---------------- 5 files changed, 27 insertions(+), 36 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index b736aa2..d95156c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -140,7 +140,7 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "dloc-cli" -version = "0.1.0" +version = "0.1.1" dependencies = [ "anyhow", "clap", diff --git a/dloc-cli/Cargo.toml b/dloc-cli/Cargo.toml index 9f19aab..84d0213 100644 --- a/dloc-cli/Cargo.toml +++ b/dloc-cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "dloc-cli" -version = "0.1.0" +version = "0.1.1" authors.workspace = true edition.workspace = true diff --git a/dloc-cli/src/commands/group.rs b/dloc-cli/src/commands/group.rs index 1870fd5..1a8c9b4 100644 --- a/dloc-cli/src/commands/group.rs +++ b/dloc-cli/src/commands/group.rs @@ -2,16 +2,12 @@ use std::path::PathBuf; use anyhow::bail; use clap::{Parser, ValueHint}; -use dloc_core::{ - games::hzd::{self, HZDLocal}, - logger::Logger, - serialize::DecimaGroup, -}; +use dloc_core::{games::hzd::HZDLocal, logger::Logger, serialize::DecimaGroup}; use crate::{logger::CliLogger, Game}; use super::{ - shared::{HzdAction, SerializeType}, + shared::{parse_hzd_languages, HzdAction, SerializeType}, utils, }; @@ -45,16 +41,7 @@ impl Group { .with_extension(self.serialize_type.extension()) }); - let languages: Vec<_> = languages - .into_iter() - .filter_map(|s| match hzd::Language::try_from(s.clone()) { - Ok(r) => Some(r), - Err(_) => { - logger.warn(format!("Invalid language: {s}")); - None - } - }) - .collect(); + let languages = parse_hzd_languages(languages, &mut logger); if languages.is_empty() { bail!("Didn't found any valid Language."); diff --git a/dloc-cli/src/commands/shared.rs b/dloc-cli/src/commands/shared.rs index f19d38b..ddfae84 100644 --- a/dloc-cli/src/commands/shared.rs +++ b/dloc-cli/src/commands/shared.rs @@ -1,7 +1,7 @@ use std::path::PathBuf; use clap::{Subcommand, ValueEnum, ValueHint}; -use dloc_core::serialize::SerializeType as CoreSerializeType; +use dloc_core::{games::hzd, logger::Logger, serialize::SerializeType as CoreSerializeType}; use super::utils; @@ -38,7 +38,7 @@ pub enum HzdAction { /// Export locals from input #[command(arg_required_else_help = true)] Export { - /// Languages to export + /// Languages to export, pass 'all' if you want to export everything #[arg(num_args = 1)] languages: Vec, /// This option is only used when serialize-type is Txt @@ -65,3 +65,20 @@ impl HzdAction { } } } + +pub fn parse_hzd_languages(languages: Vec, logger: &mut impl Logger) -> Vec { + if languages.iter().any(|l| l.eq_ignore_ascii_case("all")) { + hzd::Language::ALL_VARIANTS.to_vec() + } else { + languages + .into_iter() + .filter_map(|s| match hzd::Language::try_from(s.clone()) { + Ok(r) => Some(r), + Err(_) => { + logger.warn(format!("Invalid language: {s}")); + None + } + }) + .collect() + } +} diff --git a/dloc-cli/src/commands/single.rs b/dloc-cli/src/commands/single.rs index 91d5482..4964d3b 100644 --- a/dloc-cli/src/commands/single.rs +++ b/dloc-cli/src/commands/single.rs @@ -8,16 +8,12 @@ use std::{ use anyhow::bail; use clap::{Parser, ValueHint}; -use dloc_core::{ - games::hzd::{self, HZDLocal}, - logger::Logger, - serialize::SerializeData, -}; +use dloc_core::{games::hzd::HZDLocal, logger::Logger, serialize::SerializeData}; use crate::{logger::CliLogger, Game}; use super::{ - shared::{HzdAction, SerializeType}, + shared::{parse_hzd_languages, HzdAction, SerializeType}, utils, }; @@ -61,16 +57,7 @@ impl Single { .with_extension(self.serialize_type.extension()) }); - let languages: Vec<_> = languages - .into_iter() - .filter_map(|s| match hzd::Language::try_from(s.clone()) { - Ok(r) => Some(r), - Err(_) => { - logger.warn(format!("Invalid language: {s}")); - None - } - }) - .collect(); + let languages = parse_hzd_languages(languages, &mut logger); if languages.is_empty() { bail!("Didn't found any valid Language.");