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;
pub use crate::migrations::Migrator;
pub use crate::migrations::Migration;
pub use crate::migrations::MigrationConfig;
pub use crate::migrations::MigrationResult;
pub use crate::migrations::MigrationError;
pub use crate::migrations::MigrationSource;
pub use crate::migrations::FileMigrationSource;
pub use crate::migrations::MigrationTracker;
pub use crate::migrations::AppliedMigration;
pub use crate::migrations::MigrationCommand;
pub use crate::migrations::run_migration_cli;
pub use crate::migrations::setup_migrator;
pub use crate::validate::SchemaValidator;
pub use crate::validate::SchemaValidationError;
pub use crate::validate::ColumnInfo;
pub use crate::validate::TableInfo;
pub use crate::validate::CompileTimeVerifier;
pub use crate::query::eager::EagerLoad;
pub use crate::query::eager::WithEagerLoad;
pub use crate::query::eager::EagerQuery;
pub use crate::query::eager::EagerManyQuery;
pub use crate::performance::PerformanceConfig;
pub use crate::performance::PerformanceExecutor;
pub use crate::performance::CacheStats;
pub use crate::performance::QueryCache;
pub use crate::performance::EntityCache;
pub use crate::performance::ParallelExecutor;
pub use crate::performance::SmartPool;
pub use crate::performance::StreamedQuery;
pub use crate::error::OrmkitError;
pub use crate::error::CacheConsistency;
pub use crate::error::ResultExt;
pub use crate::typed_active_model::TypedActiveModel;
pub use crate::typed_active_model::TypedActiveModelTrait;
pub use crate::cache_rules::InvalidationStrategy;
pub use crate::cache_rules::CacheConsistency as CacheConsistencyMode;
pub use crate::cache_rules::CacheRules;

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
cache_rules
Cache invalidation and consistency rules
entity
Core Entity trait for ORM models
error
Centralized error type for ormkit
macros
Public macro module for ormkit
migrations
Migration engine for ormkit
pagination
Pagination support for query results
performance
High-performance query execution layer
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
typed_active_model
Typed ActiveModel - compile-time safe change tracking
validate
Schema validation system

Macros§

typed_active_model
Macro to generate typed ActiveModel for an entity