#![deny(missing_docs)]
#![forbid(unsafe_code)]
#![doc(html_root_url = "https://docs.rs/dbnexus/0.4.3")]
#[cfg(all(
not(clippy),
feature = "postgres",
feature = "mysql",
not(any(feature = "sqlite", feature = "duckdb"))
))]
compile_error!("Cannot enable both 'postgres' and 'mysql' features");
#[cfg(all(
not(clippy),
any(feature = "sqlite", feature = "duckdb"),
any(feature = "postgres", feature = "mysql"),
not(all(feature = "sqlite", feature = "duckdb", feature = "postgres", feature = "mysql"))
))]
compile_error!("Cannot mix embedded (sqlite/duckdb) and server-side (postgres/mysql) database features");
#[cfg(all(not(clippy), feature = "permission-engine", not(feature = "cache")))]
compile_error!("The 'permission-engine' feature requires the 'cache' feature to be enabled");
#[cfg(all(not(clippy), feature = "sql-parser", not(feature = "cache")))]
compile_error!("The 'sql-parser' feature requires the 'cache' feature to be enabled");
#[cfg(all(not(clippy), feature = "permission", not(feature = "cache")))]
compile_error!("The 'permission' feature requires the 'cache' feature to be enabled");
mod common;
mod error;
pub mod foundation;
pub mod domain;
pub mod database;
pub mod access;
pub mod observability;
#[cfg(feature = "retry")]
pub mod reliability;
pub mod storage;
pub mod i18n;
#[cfg(feature = "oxcache-integration")]
pub mod integrations;
mod generated_roles;
pub use crate::error::{DbNexusError, DbNexusResult, ErrorCategory, QueryErrorReport};
pub use crate::foundation::DatabaseType;
pub use crate::foundation::DbError;
pub use crate::foundation::DbResult;
#[cfg(feature = "failover")]
pub use crate::foundation::FailoverConfig;
#[cfg(feature = "permission")]
pub use crate::foundation::PermissionResult;
#[cfg(feature = "replica-routing")]
pub use crate::foundation::ReplicaConfig;
pub use crate::foundation::{ActiveModelTrait, Condition, EntityTrait, Set};
pub use crate::foundation::{AuditError, MigrationError, MigrationResult};
pub use crate::foundation::{CacheConfig, ConfigError, DbConfig, PoolConfig};
pub use crate::foundation::{ConfigResult, PoolResult};
pub use crate::domain::DbCacheProvider;
#[cfg(feature = "permission")]
pub use crate::domain::{
PermissionAction as DomainPermissionAction, PermissionConfig as NewPermissionConfig, PermissionConfigError,
PermissionError as NewPermissionError, PermissionProvider, RolePolicy as DomainRolePolicy,
TablePermission as DomainTablePermission,
};
pub use crate::database::DbConnection;
pub use crate::database::DbPool;
pub use crate::database::DbPoolBuilder;
pub use crate::database::Session;
#[cfg(feature = "migration")]
pub use crate::database::{
Column, ColumnType, Index, Migration, MigrationExecutor, MigrationFile, MigrationFileParser, MigrationHistory,
MigrationVersion, Schema, SchemaDiffer, SqlGenerator, Table, TableChange,
};
pub use crate::database::{ConnectionPool, DatabaseSession};
#[cfg(feature = "sharding")]
pub use crate::database::{ConsistentHashStrategy, ShardConfig, ShardRouter, ShardingStrategy, create_strategy};
#[cfg(feature = "duckdb")]
pub use crate::database::{DuckDbConnection, DuckDbExecResult, DuckDbRow};
#[cfg(feature = "ladybug")]
pub use crate::database::LadybugConnection;
#[cfg(feature = "neo4j")]
pub use crate::database::Neo4jConnection;
pub use crate::database::{
GraphConnection, GraphExecResult, GraphNode, GraphQueryResult, GraphRel, GraphRow, GraphTransaction, GraphValue,
};
#[cfg(feature = "sql-parser")]
pub use crate::access::{DdlGuard, DdlValidationResult};
pub use crate::access::{MaskType, SensitiveError, SensitiveMasker, SensitiveResult};
#[cfg(all(feature = "permission", any(feature = "ladybug", feature = "neo4j")))]
pub use crate::access::GraphPermissionContext;
#[cfg(feature = "permission")]
pub use crate::access::{
MemoryPermissionProvider, PermissionAction as AccessPermissionAction, PermissionCache, PermissionCacheConfig,
PermissionConfig, PermissionContext, PermissionProvider as AccessPermissionProvider, PermissionProviderError,
RolePolicy as AccessRolePolicy, TablePermission as AccessTablePermission, YamlPermissionProvider,
};
#[cfg(feature = "authentication")]
pub use crate::access::{
AuthCredentials, AuthError, AuthResult, AuthenticationManager, JwtClaims, JwtManager, PasswordHasher, TokenType,
User,
};
#[cfg(feature = "sql-parser")]
pub use crate::access::SqlParser;
#[cfg(feature = "sql-parser")]
pub use crate::access::SqlOperationType;
#[cfg(feature = "sql-parser")]
pub use crate::access::is_ddl_operation;
#[cfg(feature = "sql-parser")]
pub use crate::access::contains_sql_injection;
#[cfg(feature = "permission-engine")]
#[cfg(feature = "permission")]
pub use crate::access::permission_engine::{
PermissionAction as EnginePermissionAction, PermissionContext as PermissionEngineContext, PermissionDecision,
PermissionProvider as EnginePermissionProvider, PermissionResource, PermissionRule, PermissionSubject,
PolicyDecisionPoint, PolicyDecisionPointConfig, RbacPermissionProvider, Role,
YamlPermissionProvider as EngineYamlPermissionProvider,
};
#[cfg(feature = "health-check")]
pub use crate::observability::{
CircuitBreaker, CircuitBreakerConfig, CircuitBreakerError, CircuitBreakerState, HealthChecker, HealthStatus,
PoolHealthMetrics,
};
#[cfg(feature = "metrics")]
pub use crate::observability::{
ConnectionAcquireStats, HistogramBucket, HistogramStats, LatencyHistogram, LatencyPercentiles, MetricsCollector,
MetricsCollectorTrait, MetricsError, PoolMetrics, QueryStats, SlowQueryConfig, SlowQueryRecord, ThroughputStats,
TransactionStats,
};
#[cfg(feature = "retry")]
pub use crate::reliability::{RetryError, RetryExecutor, RetryPolicy, is_idempotent_operation};
#[cfg(feature = "replica-routing")]
pub use crate::database::replica::MySqlLagDetector;
#[cfg(feature = "replica-routing")]
pub use crate::database::replica::PostgresLagDetector;
#[cfg(feature = "replica-routing")]
pub use crate::database::replica::{ReplicaPool, ReplicationLag, ReplicationLagDetector, SqliteLagDetector};
#[cfg(feature = "scatter-gather")]
pub use crate::database::{
AggregateFunction, AggregateValue, PartialFailurePolicy, ScatterGatherExecutor, ScatterResult, ShardError,
};
#[cfg(feature = "saga")]
pub use crate::database::{
InMemorySagaLog, SagaAction, SagaError, SagaExecutionResult, SagaLog, SagaOrchestrator, SagaStatus, SagaStep,
SagaStepLog,
};
#[cfg(feature = "shard-migration")]
pub use crate::domain::migration::{OrchestratedMigrationResult, ShardMigrationOrchestrator, ShardMigrationResult};
#[cfg(feature = "distributed-id")]
pub use crate::common::{DistributedIdGenerator, IdComponents, SnowflakeError, SnowflakeIdGenerator};
#[cfg(all(feature = "metrics", any(test, feature = "test-utils")))]
pub use crate::observability::MockMetrics;
#[cfg(feature = "global-index")]
pub use crate::storage::{
GlobalIndex, IndexEntry, SYNC_STATUS_FAILED, SYNC_STATUS_PENDING, SYNC_STATUS_SYNCED, SyncEvent, SyncResult,
};
#[cfg(feature = "audit")]
pub use crate::domain::{
AuditConfig, AuditContext, AuditEvent, AuditEventBuilder, AuditLogger, AuditOperation, AuditQueryFilters,
AuditSeverity, AuditStatus, AuditStorage, MemoryAuditStorage,
};
#[cfg(feature = "audit")]
pub use crate::foundation::AuditResult;
#[cfg(feature = "macros")]
pub use dbnexus_macros::db_entity;
#[cfg(feature = "macros")]
pub use dbnexus_macros::db_repository;
#[cfg(feature = "oxcache-integration")]
pub use crate::integrations::OxcacheDbCacheAdapter;
#[cfg(feature = "kit")]
pub use crate::integrations::{DbNexusBuildObserver, DbNexusModule};
pub use crate::i18n::catalog::{t, t_simple, translate, translate_en};
pub use crate::i18n::error_ext::{I18nExt, LocalizedMsg};
pub use crate::i18n::locale::{clear_locale_override, current_locale, detected_locale, set_locale};
pub use crate::i18n::{DbI18nFormatter, I18nError};
#[cfg(any(feature = "sqlite", feature = "postgres", feature = "mysql", feature = "duckdb"))]
pub use sea_orm;
pub use async_trait;
pub use tokio;
#[cfg(any(
feature = "sharding",
feature = "global-index",
feature = "audit",
feature = "with-chrono"
))]
pub use chrono;