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;