summaryrefslogtreecommitdiffstats
path: root/libimagentryfilter
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-02-03 16:26:01 +0100
committerMatthias Beyer <mail@beyermatthias.de>2016-02-07 01:45:06 +0100
commitbcf8cf0447084f9ddb94312891cabc6fcce16c0d (patch)
tree305e9a449718b75370ee2df90a65b08b35616448 /libimagentryfilter
parent780410f29dd2e1bd91b3c75502b3916013e2252e (diff)
Add builtin header check: Field is empty
Diffstat (limited to 'libimagentryfilter')
-rw-r--r--libimagentryfilter/src/builtin/header/field_isempty.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/libimagentryfilter/src/builtin/header/field_isempty.rs b/libimagentryfilter/src/builtin/header/field_isempty.rs
new file mode 100644
index 00000000..83f74984
--- /dev/null
+++ b/libimagentryfilter/src/builtin/header/field_isempty.rs
@@ -0,0 +1,45 @@
+use libimagstore::store::Entry;
+
+use builtin::header::field_path::FieldPath;
+use filter::Filter;
+
+use toml::Value;
+
+pub struct FieldIsEmpty {
+ header_field_path: FieldPath,
+}
+
+impl FieldIsEmpty {
+
+ pub fn new(path: FieldPath) -> FieldIsEmpty {
+ FieldIsEmpty {
+ header_field_path: path,
+ }
+ }
+
+}
+
+impl Filter for FieldIsEmpty {
+
+ fn filter(&self, e: &Entry) -> bool {
+ let header = e.get_header();
+ self.header_field_path
+ .walk(header)
+ .map(|v| {
+ match v {
+ Value::Array(a) => a.is_empty(),
+ Value::Boolean(_) => false,
+ Value::Float(_) => false,
+ Value::Integer(_) => false,
+ Value::String(_) => false,
+ Value::Table(t) => t.is_empty(),
+ _ => true,
+ }
+ })
+ .unwrap_or(false)
+ }
+
+}
+
+
+