tinybase 0.1.5

A tiny embedded database built in Rust.
Documentation
use serde::{Deserialize, Serialize};
use tinybase::{ConditionBuilder, Constraint, QueryBuilder, Table, TinyBase};

#[derive(Serialize, Deserialize, Debug, Clone)]
struct Person {
    name: String,
    last_name: String,
    pub age: u8,
}

fn main() {
    let db = TinyBase::new(Some("./people"), true);
    let person_table: Table<Person> = db.open_table("people").unwrap();

    let name_idx = person_table
        .create_index("name", |record| record.name.to_owned())
        .unwrap();

    let lastname_idx = person_table
        .create_index("last_name", |record| record.last_name.to_owned())
        .unwrap();

    person_table
        .constraint(Constraint::unique(&name_idx))
        .unwrap();

    person_table
        .constraint(Constraint::check(|person| !person.name.contains(".")))
        .unwrap();

    init_example_data(&person_table);

    println!(
        "Found all the Smith's:\n{:#?}",
        lastname_idx.select(&"Smith".to_owned())
    );

    println!(
        "Replaced lastnames with Brown:\n{:#?}",
        QueryBuilder::new(&person_table)
            .with_condition(ConditionBuilder::or(
                ConditionBuilder::by(&name_idx, "John".to_string()),
                ConditionBuilder::by(&lastname_idx, "Jones".to_string()),
            ))
            .update(|record| Person {
                last_name: "Brown".to_owned(),
                ..record
            })
            .unwrap()
    );
}

fn init_example_data(person_table: &Table<Person>) {
    person_table
        .insert(Person {
            name: "John".to_string(),
            last_name: "Smith".to_string(),
            age: 18,
        })
        .unwrap();

    person_table
        .insert(Person {
            name: "Bill".to_string(),
            last_name: "Smith".to_string(),
            age: 40,
        })
        .unwrap();

    person_table
        .insert(Person {
            name: "Coraline".to_string(),
            last_name: "Jones".to_string(),
            age: 16,
        })
        .unwrap();
}