modelstruct

Crates.iomodelstruct
lib.rsmodelstruct
version0.1.0
created_at2025-06-29 21:29:21.537534+00
updated_at2025-06-29 21:29:21.537534+00
descriptionA Rust crate that provides a derive macro Model to automatically generate SQL CREATE TABLE IF NOT EXISTS statements from struct definitions.
homepagehttps://github.com/famz/modelstruct
repositoryhttps://github.com/famz/modelstruct
max_upload_size
id1731149
size9,337
Fam Zheng (famz)

documentation

README

ModelStruct

A Rust crate that provides a derive macro Model to automatically generate SQL CREATE TABLE IF NOT EXISTS statements from struct definitions.

Features

  • Automatic SQL Generation: Derive the Model trait to generate SQL table creation statements
  • Type Safety: Only supports a limited set of Rust types that can be safely mapped to SQL types
  • Nullable Support: Handles Option<T> types as nullable columns
  • Simple API: Just derive Model and call create_table_sql() or table_name()

Supported Types

Rust Type SQL Type Notes
i8, i16, i32 INTEGER 32-bit integers
i64 BIGINT 64-bit integers
u8, u16, u32 INTEGER Unsigned integers
u64 BIGINT Unsigned 64-bit integers
f32, f64 REAL Floating point numbers
bool BOOLEAN Boolean values
String TEXT String values
str TEXT String slices
Option<T> T NULL Nullable columns

Usage

Basic Example

use modelstruct::Model;

#[derive(Model)]
struct User {
    id: i32,
    name: String,
    email: String,
    age: Option<i32>,
    is_active: bool,
    created_at: String,
}

fn main() {
    // Generate the SQL statement
    let sql = User::create_table_sql();
    println!("{}", sql);
    
    // Get the table name
    let table_name = User::table_name();
    println!("Table name: {}", table_name);
}

This will generate SQL like:

CREATE TABLE IF NOT EXISTS user (
    id INTEGER,
    name TEXT,
    email TEXT,
    age INTEGER NULL,
    is_active BOOLEAN,
    created_at TEXT
);

Generated Methods

When you derive Model, the following methods are automatically implemented:

  • create_table_sql() -> String: Returns the complete SQL statement to create the table
  • table_name() -> String: Returns the table name (struct name in lowercase)

Installation

Add this to your Cargo.toml:

[dependencies]
modelstruct = "0.1.0"

Examples

See the examples/ directory for more usage examples.

Limitations

  • Only supports structs (not enums or unions)
  • Only supports the limited set of types listed above
  • Table names are automatically generated from struct names (lowercase)
  • No support for custom column names or constraints yet

License

MIT

Commit count: 0

cargo fmt