rustorm 0.20.0

An orm for rust
Documentation
use chrono::{NaiveDateTime, NaiveDate, NaiveTime};
use rustorm::{DbError, FromDao, Pool, ToColumnNames, ToDao, ToTableName, Value};

fn main() {
    mod for_insert {
        use super::*;
        #[derive(Debug, PartialEq, ToDao, ToColumnNames, ToTableName)]
        pub struct Actor {
            pub first_name: String,
            pub last_name: String,
            pub somedate: NaiveDateTime,
        }
    }

    mod for_retrieve {
        use super::*;
        #[derive(Debug, FromDao, ToColumnNames, ToTableName)]
        pub struct Actor {
            pub actor_id: i64,
            pub first_name: String,
            pub last_name: String,
            pub somedate: NaiveDateTime,
            pub last_update: NaiveDateTime,
        }
    }
    let create_sql = "CREATE TABLE actor(
                actor_id integer PRIMARY KEY AUTOINCREMENT,
                first_name text,
                last_name text,
                somedate text,
                last_update timestamp DEFAULT current_timestamp
        )";

    let db_url = "sqlite:///tmp/sqlite.db";
    let mut pool = Pool::new();
    let mut em = pool.em(db_url).unwrap();
    let ret = em.db().execute_sql_with_return(create_sql, &[]);
    println!("ret: {:?}", ret);
    assert!(ret.is_ok());

    let d = NaiveDate::from_ymd(2000, 10, 9);
    let t = NaiveTime::from_hms_milli(15, 2, 55, 2);

    let tom_cruise = for_insert::Actor {
        first_name: "TOM".into(),
        last_name: "CRUISE".to_string(),
        somedate: NaiveDateTime::new(d,t),
    };

    let d = NaiveDate::from_ymd(2000, 10, 9);
    let t = NaiveTime::from_hms_milli(15, 2, 55, 22);
    let tom_hanks = for_insert::Actor {
        first_name: "TOM".into(),
        last_name: "HANKS".to_string(),
        somedate: NaiveDateTime::new(d,t),
    };

    let d = NaiveDate::from_ymd(2000, 10, 9);
    let t = NaiveTime::from_hms_milli(15, 2, 55, 222);
    let tom_selleck = for_insert::Actor {
        first_name: "TOM".into(),
        last_name: "SELLECK".to_string(),
        somedate: NaiveDateTime::new(d,t),
    };
    println!("tom_cruise: {:#?}", tom_cruise);
    println!("tom_hanks: {:#?}", tom_hanks);
    println!("tom_selleck: {:#?}", tom_selleck);

    let actors = vec![tom_cruise, tom_hanks, tom_selleck];

    for actor in actors {
        let first_name: Value = actor.first_name.into();
        let last_name: Value = actor.last_name.into();
        let somedate: Value = actor.somedate.into();
        let ret = em.db().execute_sql_with_return(
            "INSERT INTO actor(first_name, last_name, somedate)
            VALUES ($1, $2, $3)",
            &[&first_name, &last_name, &somedate],
        );
        assert!(ret.is_ok());
    }

    let actors: Result<Vec<for_retrieve::Actor>, DbError> =
        em.execute_sql_with_return("SELECT * from actor", &[]);
    println!("Actor: {:#?}", actors);
    assert!(actors.is_ok());
}