diff options
author | Matthias Beyer <mail@beyermatthias.de> | 2016-02-02 17:21:08 +0100 |
---|---|---|
committer | Matthias Beyer <mail@beyermatthias.de> | 2016-02-03 16:39:05 +0100 |
commit | 41564a7d8e2d7c1606b0cb1a17f4d5c7f7d5124e (patch) | |
tree | 79d891e50749a8c50c0f649e0b43e7efada89b28 /libimagentryfilter | |
parent | 0dc88877c6c27babaf2ece32e6a7145a40d17713 (diff) |
Add filter: header::field_grep::FieldGrep
Diffstat (limited to 'libimagentryfilter')
-rw-r--r-- | libimagentryfilter/src/builtin/header/field_grep.rs | 43 | ||||
-rw-r--r-- | libimagentryfilter/src/builtin/header/mod.rs | 1 |
2 files changed, 44 insertions, 0 deletions
diff --git a/libimagentryfilter/src/builtin/header/field_grep.rs b/libimagentryfilter/src/builtin/header/field_grep.rs new file mode 100644 index 00000000..f1535602 --- /dev/null +++ b/libimagentryfilter/src/builtin/header/field_grep.rs @@ -0,0 +1,43 @@ +use regex::Regex; +use toml::Value; + +use libimagstore::store::Entry; + +use builtin::header::field_path::FieldPath; +use filter::Filter; + +/// Check whether certain header field in a entry is equal to a value +pub struct FieldGrep { + header_field_path: FieldPath, + grep: Regex, +} + +impl FieldGrep { + + pub fn new(path: FieldPath, grep: Regex) -> FieldGrep { + FieldGrep { + header_field_path: path, + grep: grep, + } + } + +} + +impl Filter for FieldGrep { + + fn filter(&self, e: &Entry) -> bool { + let header = e.get_header(); + self.header_field_path + .walk(header) + .map(|v| { + match v { + Value::String(s) => self.grep.captures(&s[..]).is_some(), + _ => false, + } + }) + .unwrap_or(false) + } + +} + + diff --git a/libimagentryfilter/src/builtin/header/mod.rs b/libimagentryfilter/src/builtin/header/mod.rs index 14b98d62..c42547df 100644 --- a/libimagentryfilter/src/builtin/header/mod.rs +++ b/libimagentryfilter/src/builtin/header/mod.rs @@ -1,3 +1,4 @@ pub mod field_eq; +pub mod field_grep; pub mod field_path; |