summaryrefslogtreecommitdiffstats
path: root/libimagentryfilter
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-02-02 17:21:08 +0100
committerMatthias Beyer <mail@beyermatthias.de>2016-02-03 16:39:05 +0100
commit41564a7d8e2d7c1606b0cb1a17f4d5c7f7d5124e (patch)
tree79d891e50749a8c50c0f649e0b43e7efada89b28 /libimagentryfilter
parent0dc88877c6c27babaf2ece32e6a7145a40d17713 (diff)
Add filter: header::field_grep::FieldGrep
Diffstat (limited to 'libimagentryfilter')
-rw-r--r--libimagentryfilter/src/builtin/header/field_grep.rs43
-rw-r--r--libimagentryfilter/src/builtin/header/mod.rs1
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;