[package]
name = "tideorm"
version = "0.9.10"
edition = "2024"
authors = ["Mohamad Al Zohbie <alzoubi528@gmail.com>"]
description = "A developer-friendly ORM for Rust with clean, expressive syntax"
license = "MIT"
repository = "https://github.com/mohamadzoh/tideorm"
homepage = "https://tideorm.com"
keywords = ["orm", "database", "postgres", "mysql", "sqlite"]
categories = ["database"]
readme = "README.md"
rust-version = "1.85"
exclude = [".cargo/**", ".github/**", ".env.example", "book.toml", "docs/CNAME", "tests/**", "wip/**"]

[workspace]
members = [".", "tideorm-macros"]
resolver = "3"

[features]
default = ["postgres", "runtime-tokio"]
postgres = ["sea-orm/sqlx-postgres"]
mysql = ["sea-orm/sqlx-mysql"]
sqlite = ["sea-orm/sqlx-sqlite"]
runtime-tokio = ["sea-orm/runtime-tokio-rustls", "dep:tokio"]
runtime-async-std = ["sea-orm/runtime-async-std-rustls"]
# These module flags intentionally gate TideORM's public API surface via #[cfg(feature = ...)]
# and feature-specific tests/benches only. They do not enable extra dependencies.
attachments = []
translations = []
fulltext = []
entity-manager = []

[dependencies]
sea-orm = { version = "2.0.0-rc.37", default-features = false, features = ["macros", "with-chrono", "with-json", "with-rust_decimal", "with-uuid", "schema-sync"] }

# Async runtime
tokio = { version = "1.50.0", features = ["full"], optional = true }
async-trait = "0.1.89"

# Serialization
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"

# Types
chrono = { version = "0.4.44", features = ["serde"] }
uuid = { version = "1.23.0", features = ["serde", "v4"] }
rust_decimal = { version = "1.41.0", features = ["serde"] }

# Error handling
thiserror = "2.0.18"

# Derive macros (our own crate)
tideorm-macros = { version = "0.9.10", path = "tideorm-macros" }

# Utils
parking_lot = "0.12.5"
arc-swap = "1.7.1"
regex = "1.12.3"
url = "2.5.7"
chacha20poly1305 = { version = "0.10.1", features = ["std"] }
rand = "0.10.0"
argon2 = { version = "0.5.3", features = ["std"] }

[dev-dependencies]
tokio = { version = "1.50.0", features = ["full", "test-util", "macros"] }
criterion = { version = "0.8.2", features = ["async_tokio"] }
dotenvy = "0.15.7"
trybuild = "1.0.112"

# Benchmarks run with: cargo bench
[[bench]]
name = "crud_benchmarks"
harness = false

[[bench]]
name = "query_benchmarks"
harness = false

[[bench]]
name = "attachments_translations_benchmarks"
harness = false
required-features = ["attachments", "translations"]

[[bench]]
name = "cache_benchmarks"
harness = false

[[bench]]
name = "stability_benchmarks"
harness = false

[[bench]]
name = "validation_benchmarks"
harness = false

[[bench]]
name = "fulltext_benchmarks"
harness = false
required-features = ["fulltext"]

[[bench]]
name = "relations_benchmarks"
harness = false

[[bench]]
name = "or_clause_benchmarks"
harness = false

[[bench]]
name = "tokenization_benchmarks"
harness = false

[[test]]
name = "sqlite_ci_smoke_test"
path = "tests/sqlite_ci_smoke_test.rs"
required-features = ["sqlite", "runtime-tokio"]

[[test]]
name = "sqlite_integration_tests"
path = "tests/sqlite_integration_tests.rs"
required-features = ["sqlite", "runtime-tokio"]

[[test]]
name = "postgres_integration_tests"
path = "tests/postgres_integration_tests.rs"
required-features = ["postgres", "runtime-tokio"]

[[test]]
name = "postgres_advanced_tests"
path = "tests/postgres_advanced_tests.rs"
required-features = ["postgres", "runtime-tokio"]

[[test]]
name = "mysql_integration_tests"
path = "tests/mysql_integration_tests.rs"
required-features = ["mysql", "runtime-tokio"]
