For when serialising/deserialising a struct into/from your (rusqlite) database queries would be convenient, but you don't need all of diesel.
[dependencies]
rusqlite-model = "0.1"use rusqlite_model::Model;
#[derive(Model)]
struct User {
name: String,
email: String,
is_active: bool,
#[sql_type(DATE)]
last_login: String,
}
fn ensure_exactly_one_user(conn: &rusqlite::Connection) -> rusqlite::Result<usize> {
User::drop_table(&conn)?;
User::create_table(&conn)?;
User {
name: "OJFord".into(),
email: "[email protected]".into(),
is_active: true,
last_login: "2021/02/28".into(),
}
.insert(&conn)
}
fn get_active_users(conn: &rusqlite::Connection) -> rusqlite::Result<Vec<User>> {
let mut stmt = conn.prepare("SELECT * FROM users WHERE is_active = ?")?;
stmt.query_map(params![true], |row| row.try_into::<User>())
}- Docs & tests
- More types (String -> TEXT; bool -> BOOL currently supported, anything else requires explicit
#[sql_type(...)]) - Some kind of
::from_queryhelper (connection & query string -> maybe model)
- Not intending to be a full ORM with much DSL, use
dieselif that's wanted; - I like
rusqlite's simplicity when only SQLite is needed, this is just intended to reduce boilerplate around inserting (VALUES (?,?,?,?,.. how many?again?) and parsing results into structs for better ergonomics; - Migrations
- Pan-DBMS portability (
rusqlite, and hence SQLite, only)