summaryrefslogtreecommitdiffstats
path: root/libimagentryfilter
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2016-03-10 20:36:50 +0100
committerMatthias Beyer <mail@beyermatthias.de>2016-03-12 15:06:33 +0100
commit7b9f8dc8adee3d46c297b9368dfa0daafa8d17d2 (patch)
tree6c7497d00c93649f9f00306d5870d02246358848 /libimagentryfilter
parent4de014c41ac84500f1360cec4a300fb5e15fe4c1 (diff)
Add field_gt filter
Diffstat (limited to 'libimagentryfilter')
-rw-r--r--libimagentryfilter/src/builtin/header/field_gt.rs60
-rw-r--r--libimagentryfilter/src/builtin/header/mod.rs1
2 files changed, 61 insertions, 0 deletions
diff --git a/libimagentryfilter/src/builtin/header/field_gt.rs b/libimagentryfilter/src/builtin/header/field_gt.rs
new file mode 100644
index 00000000..6975737b
--- /dev/null
+++ b/libimagentryfilter/src/builtin/header/field_gt.rs
@@ -0,0 +1,60 @@
+use libimagstore::store::Entry;
+
+use builtin::header::field_path::FieldPath;
+use builtin::header::field_predicate::FieldPredicate;
+use builtin::header::field_predicate::Predicate;
+use filter::Filter;
+
+use toml::Value;
+
+struct EqGt {
+ comp: Value
+}
+
+impl Predicate for EqGt {
+
+ fn evaluate(&self, v: Value) -> bool {
+ match &self.comp {
+ &Value::Integer(i) => {
+ match v {
+ Value::Integer(j) => i > j,
+ Value::Float(f) => (i as f64) > f,
+ _ => false,
+ }
+ },
+ &Value::Float(f) => {
+ match v {
+ Value::Integer(i) => f > (i as f64),
+ Value::Float(d) => f > d,
+ _ => false,
+ }
+ },
+ _ => false,
+ }
+ }
+
+}
+
+/// Check whether certain header field in a entry is equal to a value
+pub struct FieldGt {
+ filter: FieldPredicate<EqGt>,
+}
+
+impl FieldGt {
+
+ pub fn new(path: FieldPath, expected_value: Value) -> FieldGt {
+ FieldGt {
+ filter: FieldPredicate::new(path, Box::new(EqGt { comp: expected_value })),
+ }
+ }
+
+}
+
+impl Filter for FieldGt {
+
+ fn filter(&self, e: &Entry) -> bool {
+ self.filter.filter(e)
+ }
+
+}
+
diff --git a/libimagentryfilter/src/builtin/header/mod.rs b/libimagentryfilter/src/builtin/header/mod.rs
index c3725738..de5a3327 100644
--- a/libimagentryfilter/src/builtin/header/mod.rs
+++ b/libimagentryfilter/src/builtin/header/mod.rs
@@ -1,6 +1,7 @@
pub mod field_eq;
pub mod field_exists;
pub mod field_grep;
+pub mod field_gt;
pub mod field_isempty;
pub mod field_istype;
pub mod field_path;