#![deny(missing_docs)]
#![forbid(unsafe_code)]
#![doc(html_root_url = "https://docs.rs/dbnexus/0.4.0")]
#[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),
not(any(
feature = "sqlite",
feature = "postgres",
feature = "mysql",
feature = "duckdb",
feature = "ladybug",
feature = "neo4j"
))
))]
compile_error!(
"Must enable at least one database feature: 'sqlite', 'postgres', 'mysql', 'duckdb', 'ladybug', or 'neo4j'"
);
#[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;
pub mod storage;
#[cfg(feature = "i18n")]
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 = "permission")]
pub use crate::foundation::PermissionResult;
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 = "duckdb")]
pub use crate::database::{DuckDbConnection, DuckDbExecResult, DuckDbRow};
#[cfg(feature = "sharding")]
pub use crate::database::{ShardConfig, ShardRouter, ShardingStrategy, create_strategy};
#[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 = "tracing")]
pub use crate::observability::{TracingError, TracingGuard};
#[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 = "oxcache-integration")]
pub use crate::integrations::OxcacheDbCacheAdapter;
#[cfg(feature = "kit")]
pub use crate::integrations::DbNexusModule;
#[cfg(feature = "i18n")]
pub use crate::i18n::{DbI18nFormatter, I18nError};