use iqdb_filter::FilterEvaluator;
use iqdb_types::{Filter, Metadata, Value};
fn record(pairs: &[(&str, Value)]) -> Metadata {
pairs
.iter()
.map(|(k, v)| ((*k).to_string(), v.clone()))
.collect()
}
fn main() -> iqdb_types::Result<()> {
let neq = FilterEvaluator::new(Filter::neq("author", Value::String("ada".into())))?;
let not_eq = FilterEvaluator::new(Filter::not(Filter::eq(
"author",
Value::String("ada".into()),
)))?;
let no_author = record(&[("title", Value::String("untitled".into()))]);
let by_grace = record(&[("author", Value::String("grace".into()))]);
let by_ada = record(&[("author", Value::String("ada".into()))]);
println!(" Neq(author!=ada) Not(Eq(author==ada))");
for (label, meta) in [
("no author field ", &no_author),
("author = grace ", &by_grace),
("author = ada ", &by_ada),
] {
println!(
" {label} {:<18} {}",
neq.evaluate(Some(meta)),
not_eq.evaluate(Some(meta)),
);
}
assert!(!neq.evaluate(Some(&no_author)));
assert!(not_eq.evaluate(Some(&no_author)));
println!("\nOnly `Not(Eq)` selects the record that has no `author` field at all.");
Ok(())
}