sqjson 0.1.9

A simple JSON-based embedded database
Documentation
use sqjson::{YourDb, DbError};
use serde_json::json;

fn main() -> Result<(), DbError> {
    // ๐Ÿ—‚ Open or create the database
    let mut db = YourDb::open("jsondb.db")?;

    // โœ… Insert users
    db.put("user:1", &json!({ "name": "Alice", "age": 30, "city": "NY" }))?;
    db.put("user:2", &json!({ "name": "Bob", "age": 25, "city": "LA" }))?;
    db.put("user:3", &json!({ "name": "Charlie", "age": 30, "city": "NY" }))?;
    db.put("user:4", &json!({ "name": "Diana", "age": 22, "city": "LA" }))?;

    // ๐Ÿ’พ Save to disk
    db.flush()?;

    // ๐Ÿ“‹ Show all records
    println!("\n-- All Records --");
    db.show_all()?;

    // ๐Ÿ” Get full object
    if let Some(user) = db.get("user:2")? {
        println!("\nโœ… Found user:2: {}", user);
    }

    // ๐ŸŽฏ Get a specific field
    if let Some(age) = db.get_field("user:1", "age")? {
        println!("๐Ÿง  user:1 age is: {}", age);
    }

    // ๐Ÿ” Query by secondary index
    let users_age_30 = db.query("age", 30)?;
    println!("\n๐Ÿ”Ž Users with age 30: {:?}", users_age_30);

    let users_city_ny = db.query("city", "NY")?;
    println!("๐ŸŒ† Users in NY: {:?}", users_city_ny);

    let users_city_la = db.query("city", "LA")?;
    println!("๐ŸŒ† Users in LA: {:?}", users_city_la);

    // ๐Ÿ”„ Use `filter()` to get users older than 24
    let older_than_24 = db.filter(|doc| doc["age"].as_u64().unwrap_or(0) > 24)?;
    println!("\n๐ŸŽฏ Users older than 24:");
    for (key, user) in older_than_24 {
        println!("{} => {}", key, user);
    }

    // ๐Ÿ”ข Use `query_page()` for pagination (e.g., first user in NY)
    let first_ny_user = db.query_page("city", "NY", 1, 0)?;
    println!("\n๐Ÿ“„ First user in NY via pagination: {:?}", first_ny_user);

    // ๐Ÿ“ค Use `export_query()` to export users in LA
    db.export_query("city", "LA", "la_users.json")?;
    println!("๐Ÿ“ฆ Exported users in LA to la_users.json");

    // โž• New Features -----------------------------

    // 1๏ธโƒฃ Range query: age between 23 and 30
    let age_range = db.range_query("age", json!(23), json!(30))?;
    println!("\n๐Ÿ“Š Users with age between 23 and 30: {:?}", age_range);

    // 2๏ธโƒฃ Update a single field: change Bob's city to "SF"
    db.update_field("user:2", "city", json!("SF"))?;
    println!("\nโœ๏ธ Updated user:2 city to SF");
    if let Some(user2) = db.get("user:2")? {
        println!("user:2 => {}", user2);
    }

    // 3๏ธโƒฃ Search by substring: name contains "li"
    let name_contains_li = db.search_contains("name", "li")?;
    println!("\n๐Ÿ” Users with 'li' in their name: {:?}", name_contains_li);

    // --------------------------------------------

    // ๐Ÿ—‘ Delete user
    db.delete("user:3")?;
    println!("\n๐Ÿ—‘ Deleted user:3");

    // ๐Ÿ’พ Save again
    db.flush()?;

    // ๐Ÿงพ Export DB to backup file
    db.export_to_file("backup.json")?;
    println!("\n๐Ÿ“ค Exported DB to backup.json");

    // ๐Ÿ” Final state
    println!("\n-- Final Records After Delete --");
    db.show_all()?;

    Ok(())
}