blob: 334ccbd323f7a7cb630298f0b23bff2eca3b9e27 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
use filters::filter::Filter;
use filters::ops::and::And;
use filters::ops::bool::Bool;
use filters::ops::not::Not;
use crate::config::Configuration;
struct BlackListFilter {
repo_name: String,
}
impl BlackListFilter {
pub fn new(repo_name: String) -> Self {
BlackListFilter { repo_name }
}
}
impl Filter<String> for BlackListFilter {
fn filter(&self, element: &String) -> bool {
element != self.repo_name
}
}
struct WhiteListFilter {
repo_name: String,
}
impl Filter<String> for WhiteListFilter {
fn filter(&self, element: &String) -> bool {
element == self.repo_name
}
}
pub fn repo_filter(config: &Configuration) -> Box<Filter<String>> {
let blacklist = config
.blacklist()
.iter()
.cloned()
.map(BlackListFilter::new)
.fold(Box::new(Bool::new(true)), |accu, element| accu.and(element));
let whitelist = config
.whitelist()
.iter()
.cloned()
.map(WhiteListFilter::new)
.fold(Box::new(Bool::new(true)), |accu, element| accu.and(element));
Box::new(blacklist.not().or(whitelist))
}
|