Skip to content

Commit ee07cbb

Browse files
committed
Introduce "exclude_query" rule
1 parent 2220eea commit ee07cbb

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

src/main.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ pub struct RuleMatchResult {
5959
pub struct Rule {
6060
pub channel: String,
6161
pub query: Query,
62+
pub exclude_query: Option<Query>,
6263
pub display_name: String,
6364
}
6465

@@ -241,8 +242,17 @@ async fn webhook(
241242

242243
impl Rule {
243244
fn check_match(&self, payload: &github::Payload) -> bool {
244-
let query = &self.query;
245+
let include_query_result = Rule::match_results(&self.query, payload).iter().all(|&r| r);
245246

247+
if let Some(exclude_query) = &self.exclude_query {
248+
let exclude_query_result = Rule::match_results(exclude_query, payload).iter().any(|&r| r);
249+
include_query_result && !exclude_query_result
250+
} else {
251+
include_query_result
252+
}
253+
}
254+
255+
fn match_results(query: &Query, payload: &github::Payload) -> Vec<bool> {
246256
let r_repo = Rule::match_query(query.repo.as_ref(), &payload.repo().full_name);
247257

248258
let topics = &payload.repo().topics;
@@ -257,11 +267,9 @@ impl Rule {
257267
let r_labels = Rule::match_query_vec(query.label.as_ref(), labels);
258268

259269
vec![r_repo, r_topic, r_sender, r_title, r_body, r_labels]
260-
.iter()
270+
.into_iter()
261271
.flatten()
262-
.collect::<Vec<&bool>>()
263-
.iter()
264-
.all(|x| **x)
272+
.collect()
265273
}
266274

267275
fn match_query(query: Option<&String>, payload: &str) -> Option<bool> {

0 commit comments

Comments
 (0)