From 64d3761de9915164292679dc64cd2fed3bad8c2e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Moritz=20B=C3=B6hme?= Date: Sun, 23 Feb 2025 16:29:15 +0100 Subject: [PATCH] feat: Update Add command to use --tag flag and sort tags alphabetically --- src/main.rs | 3 +-- src/tag_engine.rs | 27 ++++++++++++++++++++------- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main.rs b/src/main.rs index c290fc9..c895f46 100644 --- a/src/main.rs +++ b/src/main.rs @@ -38,10 +38,9 @@ enum Commands { /// Add tags to files Add { /// Tags to add - #[arg(required = true)] + #[arg(long = "tag", required = true)] tags: Vec, /// Files to process - #[arg(required = true)] files: Vec, }, } diff --git a/src/tag_engine.rs b/src/tag_engine.rs index cb956a2..7942ec8 100644 --- a/src/tag_engine.rs +++ b/src/tag_engine.rs @@ -65,13 +65,26 @@ pub fn parse_tags(filename: &str) -> Result<(String, Vec, String), Parse } } - let mut unique_tags = std::collections::HashSet::new(); - for tag in tag_part.split_whitespace() { - validate_tag(tag)?; - unique_tags.insert(tag.to_string()); - } - - unique_tags.into_iter().collect() + // First parse all tags + let parsed_tags: Vec = tag_part + .split_whitespace() + .map(|tag| { + validate_tag(tag)?; + Ok(tag.to_string()) + }) + .collect::>()?; + + // Then filter duplicates using a HashSet + let unique_tags: Vec = parsed_tags + .into_iter() + .collect::>() + .into_iter() + .collect(); + + // Finally sort + let mut tags = unique_tags; + tags.sort(); + tags } else { Vec::new() };