Skip to main content

Crate ormkit

Crate ormkit 

Source
Expand description

§ormkit

A comprehensive ORM layer for SQLx that combines Diesel’s compile-time guarantees with SeaORM’s developer ergonomics.

§Features

  • Hybrid Type Safety: Always-on type safety without DATABASE_URL + optional CI validation
  • ActiveModel Pattern: Track field changes for efficient partial updates
  • Entity Generation: Generate entities from database schema
  • Derive Macros: Automatic implementation of traits
  • Advanced Relationships: Auto-loading, eager/lazy loading with N+1 prevention
  • Query Builder DSL: Type-safe dynamic query construction
  • Pagination: Built-in offset and cursor-based pagination
  • Transaction Management: Automatic commit/rollback with transaction guards
  • Repository Pattern: Generic CRUD operations for any entity
  • Batch Operations: Efficient bulk inserts, updates, and deletes

§Quick Start

use ormkit::{Entity, ActiveModelTrait, Repository};
use ormkit::active_value::ActiveValue;

#[derive(ormkit::Entity)]
#[ormkit(table = "users")]
struct User {
    #[ormkit(id)]
    id: Uuid,
    email: String,
    name: String,
}

// Using Repository
let repo = Repository::new(&pool);

// Find by ID
let user = repo.find_by_id(user_id).await?;

// Insert with ActiveModel
let mut user = UserActiveModel::default();
user.email = ActiveValue::Set("user@example.com".to_string());
user.name = ActiveValue::Set("John".to_string());
let user = repo.insert(user).await?;

// Pagination
use ormkit::pagination::{PaginationRequest, Paginator};
let page = User::fetch_paginated(&pool, &PaginationRequest::new(1, 20)).await?;

// Relationships
use ormkit::relations::{RelationBuilder, BelongsTo};
let posts_with_users = RelationBuilder::for_entities(posts)
    .load::<User>(&pool)
    .await?;

// Transactions
use ormkit::transaction::transaction;
let result = transaction(&pool, |tx| async move {
    // Multiple operations
    Ok(())
}).await?;

Re-exports§

pub use crate::active_value::ActiveValue;
pub use crate::active_model::ActiveModelTrait;
pub use crate::active_model::ChangeTracker;
pub use crate::entity::Entity;
pub use crate::query::Expr;
pub use crate::query::ExprNode;
pub use crate::query::Filter;
pub use crate::query::FilterOp;
pub use crate::query::JoinType;
pub use crate::query::LogicOp;
pub use crate::query::Order;
pub use crate::query::OrderExpr;
pub use crate::query::QueryBuilder;
pub use crate::query::typed::Column;
pub use crate::query::typed::ColumnRef;
pub use crate::query::typed::FilterExpr;
pub use crate::query::typed::TypedQueryBuilder;
pub use crate::schema::Table;
pub use crate::relations::BelongsTo;
pub use crate::relations::HasMany;
pub use crate::relations::RelationBuilder;
pub use crate::relations::Loaded;
pub use crate::relations::LoadError;
pub use crate::relations::LoadStrategy;
pub use crate::relations::RelationMeta;
pub use crate::relations::RelationLoader;
pub use crate::relations::HasManyLoader;
pub use crate::pagination::Paginated;
pub use crate::pagination::CursorPaginated;
pub use crate::pagination::Cursor;
pub use crate::pagination::CursorDirection;
pub use crate::pagination::Paginator;
pub use crate::pagination::PaginationError;
pub use crate::pagination::PaginationMeta;
pub use crate::pagination::PaginationRequest;
pub use crate::pagination::DEFAULT_PER_PAGE;
pub use crate::pagination::MAX_PER_PAGE;
pub use crate::transaction::Transaction;
pub use crate::transaction::IsolationLevel;
pub use crate::transaction::TransactionError;
pub use crate::transaction::TransactionResult;
pub use crate::transaction::transaction;
pub use crate::transaction::transaction_with_isolation;
pub use crate::repository::Repository;
pub use crate::repository::RepositoryError;
pub use crate::repository::RepositoryResult;
pub use crate::batch::insert_many;
pub use crate::batch::update_many;
pub use crate::batch::delete_many;
pub use crate::batch::execute_batch;
pub use crate::batch::BatchOptions;
pub use crate::batch::BatchResult;
pub use crate::batch::BatchResultInfo;
pub use crate::batch::BatchError;
pub use crate::batch::DEFAULT_BATCH_SIZE;
pub use crate::batch::MAX_BATCH_SIZE;

Modules§

active_model
ActiveModel trait for change tracking and CRUD operations
active_value
ActiveValue tracks field changes for ActiveModel pattern
batch
Batch operations for efficient bulk database operations
entity
Core Entity trait for ORM models
macros
Public macro module for ormkit
pagination
Pagination support for query results
query
Query Builder DSL
relations
Relationship management for ORM entities
repository
Repository pattern for generic CRUD operations
schema
Schema Type Generation System
transaction
Transaction management for ORM operations

Derive Macros§

Entity
Derive macro for implementing Entity trait