bottle-orm-macro 0.1.0

Procedural macros for bottle-orm, a lightweight ORM for Rust
Documentation

Bottle ORM Macro

This crate provides the procedural macros for Bottle ORM, specifically the #[derive(Model)] macro. It is used to automatically generate schema definitions and SQL mapping for your Rust structs.

Note: This crate is intended to be used as a dependency of bottle-orm, not standalone.

Usage

Derive Model on your struct to register it with the ORM. You can customize field behavior using the #[orm(...)] attribute.

use bottle_orm::Model;

#[derive(Model)]
struct User {
    #[orm(primary_key)]
    id: i32,
    
    #[orm(size = 50, unique, index)]
    username: String,
    
    #[orm(create_time)]
    created_at: chrono::DateTime<chrono::Utc>,
}

Supported Attributes

You can use the #[orm(...)] attribute on struct fields to configure database constraints and types.

Attribute Description Example
primary_key Marks the column as the Primary Key. #[orm(primary_key)]
unique Adds a UNIQUE constraint to the column. #[orm(unique)]
index Creates a database index for this column. #[orm(index)]
create_time Sets the default value to the current timestamp (NOW()/CURRENT_TIMESTAMP). #[orm(create_time)]
size = N Sets the column size (e.g., VARCHAR(N)). Defaults to TEXT if omitted. #[orm(size = 255)]
foreign_key = "Table::Column" Defines a Foreign Key relationship. #[orm(foreign_key = "User::id")]

Type Mapping

The macro automatically maps Rust types to SQL types:

Rust Type SQL Type (Postgres/General)
i32 INTEGER
i64 BIGINT
String TEXT (or VARCHAR(n) if size is set)
bool BOOLEAN
f64 DOUBLE PRECISION
Option<T> Nullable column of T
chrono::DateTime<Utc> TIMESTAMPTZ
chrono::NaiveDateTime TIMESTAMP
chrono::NaiveDate DATE
chrono::NaiveTime TIME

License

MIT