jsonfilter 0.2.1

Filter and compare JSON objects
Documentation
use jsonfilter::{try_matches, FilterError};
use serde_json::{json, Value};

fn main() {
    // Filter can be as complex as you want
    let filter = json!({
        "$and": [
            {"$or": [
                {"age": {"$gte": 18}},
                {"is_student": true}
            ]},
            {"$not": {
                "$or": [
                    {"city": "New York"},
                    {"city": "Los Angeles"}
                ]
            }}
        ]
    });

    let obj1 = json!({"age": 25, "is_student": false, "city": "Chicago"});
    let obj2 = json!({"age": 16, "is_student": true, "city": "Miami"});
    let obj3 = json!({"age": 30, "is_student": false, "city": "New York"});

    println!("Filter:");
    println!("{}", filter);
    println!("Objects:");
    println!("Object 1: {}", obj1);
    println!("Object 2: {}", obj2);
    println!("Object 3: {}", obj3);

    // Matching objects against the filter
    match_objects(&filter, &obj1);
    match_objects(&filter, &obj2);
    match_objects(&filter, &obj3);
}

fn match_objects(filter: &Value, obj: &Value) {
    match try_matches(filter, obj) {
        Ok(result) => {
            if result {
                println!("Filter matches the object");
            } else {
                println!("Filter does not match the object");
            }
        }
        Err(err) => match err {
            FilterError::InvalidFilter => println!("Invalid filter"),
            FilterError::UnknownOperator => println!("Unknown operator in filter"),
            FilterError::KeyNotFound => println!("Key not found in object"),
        },
    }
}