aurora 0.0.5

A lightweight and extensible data storage library in Rust.
Documentation
use aurora::{InMemoryStorage, Storage};

#[derive(Debug, Clone)]
struct Product {
    name: String,
    price: f64,
    category: String,
    in_stock: bool,
}

fn main() {
    let mut storage = InMemoryStorage::<u32, Product>::create();

    storage.insert(
        1,
        Product {
            name: "Laptop".to_string(),
            price: 999.99,
            category: "Electronics".to_string(),
            in_stock: true,
        },
    );

    storage.insert(
        2,
        Product {
            name: "Mouse".to_string(),
            price: 29.99,
            category: "Electronics".to_string(),
            in_stock: true,
        },
    );

    storage.insert(
        3,
        Product {
            name: "Desk".to_string(),
            price: 299.99,
            category: "Furniture".to_string(),
            in_stock: false,
        },
    );

    storage.insert(
        4,
        Product {
            name: "Chair".to_string(),
            price: 149.99,
            category: "Furniture".to_string(),
            in_stock: true,
        },
    );

    storage.insert(
        5,
        Product {
            name: "Keyboard".to_string(),
            price: 79.99,
            category: "Electronics".to_string(),
            in_stock: true,
        },
    );

    println!("Total products: {}\n", storage.len());

    // Search for products in stock
    println!("1. Products in stock:");

    let in_stock_ids = storage.search_by_value(|p| p.in_stock);
    for id in &in_stock_ids {
        if let Some(product) = storage.get(id) {
            println!("   ID {}: {} - ${:.2}", id, product.name, product.price);
        }
    }
    println!("   Found {} products\n", in_stock_ids.len());

    // Search for electronics
    println!("2. Electronics category:");

    let electronics_ids = storage.search_by_value(|p| p.category == "Electronics");
    for id in &electronics_ids {
        if let Some(product) = storage.get(id) {
            println!("   ID {}: {} - ${:.2}", id, product.name, product.price);
        }
    }
    println!("   Found {} products\n", electronics_ids.len());

    // Search for products under $100
    println!("3. Products under $100:");

    let affordable_ids = storage.search_by_value(|p| p.price < 100.0);
    for id in &affordable_ids {
        if let Some(product) = storage.get(id) {
            println!("   ID {}: {} - ${:.2}", id, product.name, product.price);
        }
    }
    println!("   Found {} products\n", affordable_ids.len());

    // Complex search: In-stock electronics under $100
    println!("4. In-stock electronics under $100:");

    let filtered_ids = storage.search_by_value(|p| {
        p.in_stock && p.category == "Electronics" && p.price < 100.0
    });
    for id in &filtered_ids {
        if let Some(product) = storage.get(id) {
            println!("   ID {}: {} - ${:.2}", id, product.name, product.price);
        }
    }
    println!("   Found {} products\n", filtered_ids.len());

    // Search with no results
    println!("5. Products over $1000:");

    let expensive_ids = storage.search_by_value(|p| p.price > 1000.0);
    if expensive_ids.is_empty() {
        println!("   No products found");
    }
}