From 46d451f70ddbc9d00e62cce32cc675f0ec1a5d5e Mon Sep 17 00:00:00 2001 From: ShellWen Date: Tue, 28 Nov 2023 16:44:38 +0800 Subject: [PATCH] :sparkles: Add a new matcher type `resource-name-regexp` See also: #13 --- crates/core/src/matcher.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/crates/core/src/matcher.rs b/crates/core/src/matcher.rs index 8186545..b735557 100644 --- a/crates/core/src/matcher.rs +++ b/crates/core/src/matcher.rs @@ -11,12 +11,15 @@ pub(crate) trait SourceMatcher { pub(crate) enum SourceMatcherEnum { #[serde(rename = "resource-name-keyword")] ResourceNameKeywordMatcher(ResourceNameKeywordMatcher), + #[serde(rename = "resource-name-regexp")] + ResourceNameRegexpMatcher(ResourceNameRegexpMatcher), } impl SourceMatcher for SourceMatcherEnum { fn matches(&self, source: &Source) -> bool { match self { SourceMatcherEnum::ResourceNameKeywordMatcher(matcher) => matcher.matches(source), + SourceMatcherEnum::ResourceNameRegexpMatcher(matcher) => matcher.matches(source), } } } @@ -31,3 +34,15 @@ impl SourceMatcher for ResourceNameKeywordMatcher { source.resource_name.contains(&self.keyword) } } + +#[derive(Deserialize, Debug)] +pub struct ResourceNameRegexpMatcher { + pub regexp: String, +} + +impl SourceMatcher for ResourceNameRegexpMatcher { + fn matches(&self, source: &Source) -> bool { + let re = regex::Regex::new(&self.regexp).unwrap(); + re.is_match(&source.resource_name) + } +}