fabrique 0.2.2

SQL-first, type-safe, ergonomic database toolkit for Rust
Documentation

Fabrique

SQL-first, type-safe, ergonomic database toolkit for Rust.

Fabrique provides a fluent API for defining models, querying data, and generating test fixtures — built on SQL semantics rather than hiding them.

Core Features

Models

Define database models using the #[derive(Model)] macro. Models automatically map to database tables and provide methods for CRUD operations, soft deletes, and more. See the [model] module for detailed documentation.

Query Builder

Build type-safe database queries with a fluent API. The query builder provides methods for filtering, ordering, limiting results, and more. See the [query_builder] module for details.

Factories

Generate test data easily with the #[derive(Factory)] macro. Factories help you create model instances for testing without manually specifying every field. See the [factory] module for more information.

Quick Example

use fabrique::prelude::*;

// Define a model
#[derive(Model, Factory)]
pub struct Product {
    id: uuid::Uuid,
    name: String,
    price_cents: i32,
}

# async fn example(db: &Pool<Backend>) -> Result<(), fabrique::Error> {
// Query the database
let expensive_products: Vec<Product> = Product::query()
    .r#where(Product::PRICE_CENTS, ">=", 1000)
    .get(db)
    .await?;

// Create a new record
let product = Product {
    id: uuid::Uuid::new_v4(),
    name: "Anvil 3000".to_string(),
    price_cents: 9999,
};
product.create(db).await?;

// Generate test data with factories
let test_product = Product::factory().create(db).await?;
# Ok(())
# }

Getting Started

To use Fabrique in your project, add it to your Cargo.toml:

[dependencies]
fabrique = { version = "0.2", features = ["sqlite"] }

Then define your models and start querying. See the [model] module for a comprehensive guide on model conventions and usage