microrm 0.6.3

Lightweight ORM using sqlite as a backend
Documentation
use microrm::prelude::*;
use test_log::test;

mod common;

#[derive(Clone, Entity, PartialEq)]
struct Container {
    value: usize,
}

#[derive(Schema)]
struct Schema {
    containers: microrm::IDMap<Container>,
}

fn simple_test_data(txn: &mut microrm::Transaction, db: &Schema) {
    db.containers.insert(txn, Container { value: 5 }).unwrap();
    db.containers.insert(txn, Container { value: 4 }).unwrap();
    db.containers.insert(txn, Container { value: 9 }).unwrap();
    db.containers.insert(txn, Container { value: 7 }).unwrap();
}

#[test]
fn simple_iter() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    let mut txn = pool.start().unwrap();

    simple_test_data(&mut txn, &db);

    let mut it = db
        .containers
        .order_by_asc(Container::Value)
        .iter(&mut txn)
        .expect("an iterator");

    let v = it
        .next()
        .expect("first result")
        .expect("valid first result");
    assert_eq!(v.value, 4);
    let v = it
        .next()
        .expect("second result")
        .expect("valid second result");
    assert_eq!(v.value, 5);
    let v = it
        .next()
        .expect("third result")
        .expect("valid third result");
    assert_eq!(v.value, 7);
    let v = it
        .next()
        .expect("fourth result")
        .expect("valid fourth result");
    assert_eq!(v.value, 9);

    assert!(it.next().is_none());
}

#[test]
fn borrow_iter() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    let mut txn = pool.start().unwrap();

    simple_test_data(&mut txn, &db);

    let mut values = vec![];

    db.containers
        .order_by_asc(Container::Value)
        .iter_refs(&mut txn, |c| {
            values.push(c.value);
            std::ops::ControlFlow::Continue(())
        })
        .expect("iteration failed");

    assert_eq!(values, vec![4, 5, 7, 9]);
}