https://github.com/ojford/rusqlite-model
Model trait and derive implementation for rusqlite
https://github.com/ojford/rusqlite-model
database orm rusqlite rust sqlite
Last synced: 3 months ago
JSON representation
Model trait and derive implementation for rusqlite
- Host: GitHub
- URL: https://github.com/ojford/rusqlite-model
- Owner: OJFord
- Created: 2021-03-01T00:24:04.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2023-01-11T01:58:00.000Z (over 2 years ago)
- Last Synced: 2025-03-19T01:45:25.630Z (3 months ago)
- Topics: database, orm, rusqlite, rust, sqlite
- Language: Rust
- Homepage: https://crates.io/crates/rusqlite-model
- Size: 14.6 KB
- Stars: 12
- Watchers: 2
- Forks: 2
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
# rusqlite-model
[](//crates.io/crates/rusqlite-model) [](//docs.rs/rusqlite-model)
For when serialising/deserialising a struct into/from your ([rusqlite](//github.com/rusqlite/rusqlite)) database queries would be convenient, but you don't need all of [diesel](//diesel.rs).
## Usage
```toml
[dependencies]
rusqlite-model = "0.1"
``````rust
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 {
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> {
let mut stmt = conn.prepare("SELECT * FROM users WHERE is_active = ?")?;
stmt.query_map(params![true], |row| row.try_into::())
}
```## To do
- Docs & tests
- More types (String -> TEXT; bool -> BOOL currently supported, anything else requires explicit `#[sql_type(...)]`)
- Some kind of `::from_query` helper (connection & query string -> maybe model)## Won't do
- Not intending to be a full ORM with much DSL, use `diesel` if 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)