SQLited is a set of macro tools designed to simplify SQLite database operations in Rust. It provides a concise way to handle SQLite database interactions by offering helper macros and utility functions that reduce boilerplate code and enhance type safety.
- Table definition macros: Quickly define table structures using the
table!macro - Custom type serialization: Support for storing custom Rust types in SQLite
- Text serialization for simple enum types
- Binary serialization (using bincode)
- JSON serialization (using serde_json)
- SQL query helpers: Simplify parameterized queries with the
sql!macro - Connection helper functions: Basic functionality for connection pool management
Add the following dependency to your Cargo.toml:
[dependencies]
sqlited = { git = "https://github.com/mongris/sqlited.git" }Table Definition
use sqlited::table;// Define table structure using a macro#[table]structUser{#[autoincrement]id:i32,name:String,email:String,age:i32,}Creating a Connection
fnmain() -> Result<(),Box<dyn std::error::Error>>{// Create in-memory database connectionlet pool = sqlited::connection::new_memory_pool()?;let conn = sqlited::connection::get_connection(&pool)?;// Create table
conn.execute(&User::create_table_sql(),[])?;Ok(())}Data Operations
// Build a query using the sql! macrolet query = sql!(INSERTINTO user (name, email, age)VALUES(?, ?, ?),User{
name:"Alice".to_string(),
email:"alice@example.com".to_string(),
age:28,});// Execute the query
query.execute(&conn)?;// Query datalet users = conn.query("SELECT * FROM user WHERE age > ?",[20],
|row| {Ok(User{id: row.get(0)?,name: row.get(1)?,email: row.get(2)?,age: row.get(3)?,})})?;SQLited provides simple ways to store custom types in SQLite:
use serde::{Serialize,Deserialize};use sqlited::bindable_value;// Define an enum#[derive(Default,Copy,Clone,Debug,PartialEq)]pubenumStatus{#[default]Active,Inactive,}// Implement serialization using a macrobindable_value!(enumSerializedStatus(Status){Active => "active",Inactive => "inactive",});// Complex struct#[derive(Default,Clone,Debug,PartialEq,Serialize,Deserialize)]pubstructSettings{pubtheme:String,pubnotifications:bool,}// Use JSON serializationbindable_value!(json JsonSettings(Settings));- SQLited is not a complete ORM system; it only provides basic macros and helper tools
- No relationship mapping, migration management, or other advanced features
- The main goal is to reduce repetitive code when writing SQLite operations
- Most SQL queries still need to be written manually
- Core functionality still relies on the rusqlite library
SQLited is an experimental project developed with AI assistance, exploring ways to simplify database interaction code using Rust's macro system. + Contributions and suggestions for improvement are welcome!
MIT
SQLited is an AI-assisted experimental project showcasing how Rust macro systems can be used to simplify database interaction code.