diff --git a/src/tag_engine.rs b/src/tag_engine.rs index 7942ec8..8b03a4d 100644 --- a/src/tag_engine.rs +++ b/src/tag_engine.rs @@ -92,6 +92,12 @@ pub fn parse_tags(filename: &str) -> Result<(String, Vec, String), Parse Ok((base_name, tags, extension)) } +pub fn filter_tags(current: Vec, remove: &[String]) -> Vec { + current.into_iter() + .filter(|tag| !remove.contains(tag)) + .collect() +} + pub fn add_tags(current: Vec, new: Vec) -> Vec { let mut result = current; @@ -257,4 +263,28 @@ mod tests { assert_eq!(tags, vec!["tag1"]); assert_eq!(ext, ".txt"); } + + #[test] + fn test_filter_tags_multi_remove() { + let current = vec!["tag1".to_string(), "tag2".to_string(), "tag3".to_string()]; + let remove = vec!["tag1".to_string(), "tag3".to_string()]; + let result = filter_tags(current, &remove); + assert_eq!(result, vec!["tag2"]); + } + + #[test] + fn test_filter_tags_non_existent() { + let current = vec!["tag1".to_string(), "tag2".to_string()]; + let remove = vec!["tag3".to_string()]; + let result = filter_tags(current, &remove); + assert_eq!(result, vec!["tag1", "tag2"]); + } + + #[test] + fn test_filter_tags_empty_result() { + let current = vec!["tag1".to_string(), "tag2".to_string()]; + let remove = vec!["tag1".to_string(), "tag2".to_string()]; + let result = filter_tags(current, &remove); + assert!(result.is_empty()); + } }