Models & Schemas

Define a model, types, constraints, relations, migrations.

● ● ●
use runique::prelude::*;

model! {
    Product,
    table: "product",
    pk: id => i32,
    fields: {
        // Basic types
        name:        String   [required, max_len(255)],
        slug:        String   [required, unique, max_len(255)],
        description: text     [nullable],
        price:       f64      [required],
        stock:       i32      [required, default(0)],
        active:      bool     [required, default(true)],

        // Foreign key
        category_id: i32      [required, fk(category.id, cascade)],

        // Automatic timestamps
        created_at:  datetime [auto_now],
        updated_at:  datetime [auto_now_update],
    }
}
[required]               NOT NULL field
[nullable]               NULL field
[unique]                 UNIQUE constraint
[max_len(N)]             VARCHAR(N)
[default(value)]         SQL default value
[auto_now]               CURRENT_TIMESTAMP on creation
[auto_now_update]        CURRENT_TIMESTAMP on each update
[fk(table.col, cascade)] foreign key with ON DELETE CASCADE
[fk(table.col, null)]    foreign key with ON DELETE SET NULL
model! {
    Article,
    table: "article",
    pk: id => i32,
    fields: { title: String [required] }
}

// Enables Article::objects.all(), .filter(), .get(), etc.
impl_objects!(Entity);