exemplar 0.37.0

A boilerplate eliminator for rusqlite.
Documentation
use anyhow::Result;

use exemplar::Model;
use exemplar::record;

record! {
    name => String,
    age  => u16,
}

record! {
    Name => Age,
    age  => u16,
}

#[derive(Debug, PartialEq, Eq, Model)]
#[table("people")]
struct Person {
    name: String,
    age: u16,
    alive: bool, 
}

#[test]
fn test_person() -> Result<()> {
    use rusqlite::Connection;

    let conn = Connection::open_in_memory()
        .unwrap();

    conn.execute_batch("
        CREATE TABLE people (name, age, alive);
    ")?;

    let alice = Person {
        name: "Alice".to_owned(),
        age: 21,
        alive: true
    };
    
    let bob = Person {
        name: "Bob".to_owned(),
        age: 90,
        alive: false
    };

    alice.insert(&conn)?;
    bob.insert(&conn)?;

    let mut get_people = conn.prepare("SELECT name, age FROM people ORDER BY name ASC")?;
    let mut get_ages = conn.prepare("SELECT age FROM people ORDER BY age ASC")?;

    let mut iter_people = get_people.query_and_then([], Record::from_row)?;

    let alice = iter_people.next().unwrap()?;
    let bob = iter_people.next().unwrap()?; 

    assert_eq!(alice.name, "Alice");
    assert_eq!(alice.age, 21);
    assert_eq!(bob.name, "Bob");
    assert_eq!(bob.age, 90);

    let mut iter_ages = get_ages.query_and_then([], Age::from_row)?;

    let alice = iter_ages.next().unwrap()?;
    let bob = iter_ages.next().unwrap()?; 

    assert_eq!(alice.age, 21);
    assert_eq!(bob.age, 90);

    Ok(())
}