#[cfg(all(feature = "database", feature = "turso"))]
compile_error!(
"Features `database` (PostgreSQL) and `turso` (libsql) are mutually exclusive. \
Enable only one database backend."
);
#[cfg(all(feature = "database", feature = "surrealdb"))]
compile_error!(
"Features `database` (PostgreSQL) and `surrealdb` are mutually exclusive. \
Enable only one database backend."
);
#[cfg(all(feature = "turso", feature = "surrealdb"))]
compile_error!(
"Features `turso` (libsql) and `surrealdb` are mutually exclusive. \
Enable only one database backend."
);
pub mod config;
pub mod error;
pub mod health;
pub mod ids;
pub mod middleware;
pub mod pool_health;
pub mod responses;
pub mod server;
pub mod service_builder;
pub mod state;
pub mod versioning;
#[cfg(feature = "database")]
pub mod database;
#[cfg(feature = "turso")]
pub mod turso;
#[cfg(feature = "surrealdb")]
pub mod surrealdb_backend;
#[cfg(feature = "cache")]
pub mod cache;
#[cfg(feature = "events")]
pub mod events;
#[cfg(feature = "clickhouse")]
pub mod clickhouse_backend;
pub mod observability;
#[cfg(feature = "openapi")]
pub mod openapi;
#[cfg(feature = "grpc")]
pub mod grpc;
#[cfg(feature = "websocket")]
pub mod websocket;
#[cfg(feature = "auth")]
pub mod auth;
#[cfg(feature = "session")]
pub mod session;
#[cfg(feature = "htmx")]
pub mod htmx;
#[cfg(feature = "askama")]
pub mod templates;
#[cfg(feature = "sse")]
pub mod sse;
#[cfg(feature = "pagination")]
pub mod pagination;
#[cfg(feature = "repository")]
pub mod repository;
#[cfg(feature = "handlers")]
pub mod handlers;
#[cfg(feature = "audit")]
pub mod audit;
#[cfg(feature = "tls")]
pub mod tls;
#[cfg(feature = "login-lockout")]
pub mod lockout;
#[cfg(feature = "accounts")]
pub mod accounts;
pub mod agents;
pub mod build_utils;
pub mod prelude {
pub use crate::config::{Config, RateLimitConfig, RouteRateLimitConfig};
#[cfg(feature = "cedar-authz")]
pub use crate::config::CedarConfig;
pub use crate::error::{Error, Result};
#[cfg(any(feature = "database", feature = "turso", feature = "surrealdb"))]
pub use crate::error::{DatabaseError, DatabaseErrorKind, DatabaseOperation};
pub use crate::health::{health, pool_metrics, readiness};
pub use crate::ids::{MakeTypedRequestId, RequestId, RequestIdError};
pub use crate::pool_health::PoolHealthSummary;
#[cfg(feature = "database")]
pub use crate::pool_health::DatabasePoolHealth;
#[cfg(feature = "turso")]
pub use crate::pool_health::TursoDbHealth;
#[cfg(feature = "surrealdb")]
pub use crate::pool_health::SurrealDbHealth;
#[cfg(feature = "cache")]
pub use crate::pool_health::RedisPoolHealth;
pub use crate::middleware::{
normalize_path, request_id_layer, request_id_propagation_layer, sensitive_headers_layer,
Claims, CompiledRoutePatterns, PasetoAuth, RateLimit, RequestTrackingConfig,
TokenValidator, PROPAGATE_HEADERS, SENSITIVE_HEADERS,
};
#[cfg(feature = "events")]
pub use crate::pool_health::NatsClientHealth;
#[cfg(feature = "clickhouse")]
pub use crate::pool_health::ClickHouseHealth;
#[cfg(feature = "clickhouse")]
pub use crate::clickhouse_backend::AnalyticsWriter;
#[cfg(feature = "cache")]
pub use crate::middleware::{RedisTokenRevocation, TokenRevocation};
#[cfg(feature = "jwt")]
pub use crate::middleware::JwtAuth;
pub use crate::responses::{
Accepted, Conflict, Created, FieldError, NoContent, Success, ValidationError,
};
pub use crate::server::Server;
pub use crate::service_builder::{ActonService, ServiceBuilder, VersionedRoutes};
pub use crate::state::{AppState, AppStateBuilder};
pub use crate::versioning::{
extract_version_from_path, versioned_router, ApiVersion, DeprecationInfo,
VersionedApiBuilder, VersionedResponse,
};
#[cfg(feature = "resilience")]
pub use crate::middleware::ResilienceConfig;
#[cfg(feature = "otel-metrics")]
pub use crate::middleware::{metric_labels, metric_names, MetricsConfig};
#[cfg(feature = "governor")]
pub use crate::middleware::{GovernorConfig, GovernorRateLimit, RateLimitExceeded};
#[cfg(feature = "cedar-authz")]
pub use crate::middleware::CedarAuthz;
#[cfg(all(feature = "cedar-authz", feature = "cache"))]
pub use crate::middleware::{PolicyCache, RedisPolicyCache};
#[cfg(all(feature = "cedar-authz", feature = "grpc"))]
pub use crate::middleware::{CedarAuthzLayer, CedarAuthzService};
#[cfg(feature = "observability")]
pub use crate::observability::init_tracing;
#[cfg(feature = "openapi")]
pub use crate::openapi::{OpenApiBuilder, RapiDoc, ReDoc, SwaggerUI};
#[cfg(feature = "grpc")]
pub use crate::grpc::{
add_request_id_to_response, paseto_auth_interceptor, request_id_interceptor,
token_auth_interceptor, Code, GrpcServer, GrpcTracingLayer, HealthService, LoggingLayer,
Request, RequestIdExtension, Response as GrpcResponse, Status,
};
#[cfg(all(feature = "grpc", feature = "jwt"))]
pub use crate::grpc::jwt_auth_interceptor;
#[cfg(all(feature = "grpc", feature = "governor"))]
pub use crate::grpc::GrpcRateLimitLayer;
#[cfg(feature = "auth")]
pub use crate::auth::{
ApiKey, ApiKeyGenerator, AuthConfig, CachedKey, KeyFormat, KeyManager, KeyRotationConfig,
KeyStatus, PasetoGenerationConfig, PasetoGenerator, PasswordConfig, PasswordHasher,
RefreshTokenConfig, SigningKeyMetadata, TokenGenerationConfig, TokenGenerator, TokenPair,
};
#[cfg(all(
feature = "auth",
any(feature = "database", feature = "turso", feature = "surrealdb")
))]
pub use crate::auth::KeyRotationStorage;
#[cfg(all(feature = "auth", feature = "jwt"))]
pub use crate::auth::JwtGenerator;
#[cfg(feature = "oauth")]
pub use crate::auth::{
ApiKeyConfig, OAuthConfig, OAuthProvider, OAuthProviderConfig, OAuthTokens, OAuthUserInfo,
};
#[cfg(feature = "websocket")]
pub use crate::websocket::{
BroadcastTarget,
BroadcastToRoom,
Broadcaster,
ConnectionDisconnected,
ConnectionId,
JoinRoomRequest,
LeaveRoomRequest,
Message as WsMessage,
Room,
RoomConfig,
RoomId,
RoomManager,
RoomMember,
WebSocket,
WebSocketConfig,
WebSocketConnection,
WebSocketUpgrade,
};
#[cfg(feature = "session")]
pub use crate::session::{
csrf_middleware,
AuthSession,
CsrfConfig,
CsrfLayer,
CsrfMiddleware,
CsrfToken,
FlashKind,
FlashMessage,
FlashMessages,
SessionAuth,
SessionConfig,
SessionData,
SessionStorage,
TypedSession,
};
#[cfg(feature = "session")]
pub use tower_sessions::Session;
#[cfg(feature = "htmx")]
pub use crate::htmx::{
fragment_or_full,
is_boosted_request,
is_htmx_request,
AutoVaryLayer,
AutoVaryMiddleware,
HtmlFragment,
HxBoosted,
HxCurrentUrl,
HxEvent,
HxHistoryRestoreRequest,
HxLocation,
HxPrompt,
HxPushUrl,
HxRedirect,
HxRefresh,
HxReplaceUrl,
HxRequest,
HxReselect,
HxResponseTrigger,
HxReswap,
HxRetarget,
HxTarget,
HxTrigger,
HxTriggerEvents,
HxTriggerName,
OutOfBandSwap,
SwapOption,
TriggerTiming,
VaryHxRequest,
VaryHxTarget,
VaryHxTrigger,
VaryHxTriggerName,
};
#[cfg(feature = "askama")]
pub use crate::templates::{
classes,
pluralize,
truncate,
HtmlTemplate,
RenderMode,
Template,
TemplateContext,
};
#[cfg(feature = "sse")]
pub use crate::sse::{
htmx_close_event,
htmx_event,
htmx_json_event,
htmx_oob_event,
htmx_trigger,
BroadcastMessage,
BroadcastTarget as SseBroadcastTarget,
ConnectionId as SseConnectionId,
HtmxSwap,
SseBroadcaster,
SseConfig,
SseConnection,
SseEventExt,
TypedEvent,
};
#[cfg(feature = "sse")]
pub use axum::response::sse::{Event as SseEvent, KeepAlive, Sse};
pub use crate::agents::{BackgroundWorker, BackgroundWorkerConfig, TaskStatus};
pub use crate::agents::{AggregatedHealthResponse, HealthStatus};
#[cfg(feature = "audit")]
pub use crate::audit::{
AlertConfig, AuditAlertEvent, AuditAlertHook, AuditConfig, AuditEvent, AuditEventKind,
AuditLogger, AuditRoute, AuditSeverity, AuditSource, AuditStorage,
};
#[cfg(feature = "login-lockout")]
pub use crate::lockout::{
LockoutConfig, LockoutEvent, LockoutMiddleware, LockoutNotification, LockoutStatus,
LoginLockout, UnlockReason,
};
#[cfg(all(feature = "login-lockout", feature = "audit"))]
pub use crate::lockout::AuditLockoutNotification;
#[cfg(feature = "accounts")]
pub use crate::accounts::{
Account, AccountError, AccountEvent, AccountId, AccountNotification, AccountService,
AccountStatus, AccountStorage, AccountsConfig, CreateAccount, UpdateAccount,
};
#[cfg(all(feature = "accounts", feature = "audit"))]
pub use crate::accounts::AuditAccountNotification;
#[cfg(feature = "account-handlers")]
pub use crate::accounts::handlers::account_routes;
pub use axum::{serve, Extension, Router};
pub use axum::extract::{
ConnectInfo, Form, MatchedPath, OriginalUri, Path, Query, RawQuery, State, };
pub use axum::extract::Request as AxumRequest;
pub use axum::http::{header, HeaderMap, HeaderName, HeaderValue, StatusCode};
pub use axum::response::{
AppendHeaders, ErrorResponse, Html, IntoResponse, Json, Redirect, Response, };
pub use axum::response::{IntoResponseParts, ResponseParts};
pub use axum::routing::{
any, delete, get, on, patch, post, put, MethodRouter, };
pub use axum::middleware::{from_fn, from_fn_with_state, Next};
pub use axum::body::{Body, Bytes};
pub use axum::extract::FromRequestParts;
pub use axum::http::request::Parts as RequestParts;
pub use serde::{Deserialize, Serialize};
pub use tracing::{debug, error, info, instrument, trace, warn, Level, Span};
pub use tokio;
pub use async_trait::async_trait;
pub use anyhow::{self, Context as AnyhowContext};
pub use thiserror::Error;
pub use chrono::{DateTime, Duration as ChronoDuration, NaiveDateTime, Utc};
pub use uuid::Uuid;
pub use futures::{future, stream, Future, Stream, StreamExt, TryFutureExt, TryStreamExt};
pub use http::{Method, Uri};
pub use acton_reactive::prelude::*;
#[cfg(feature = "pagination")]
pub use crate::pagination::{
Cursor,
CursorBuilder,
CursorDirection,
CursorValue,
Filter,
FilterBuilder,
FilterOperator,
FilterValue,
IntoPaginationParams,
PaginationParams,
Paginator,
PaginatorBuilder,
PaginatorError,
PaginatorResponse,
PaginatorResponseMeta,
PaginatorResult,
PaginatorTrait,
SearchBuilder,
SearchParams,
SortBuilder,
SortDirection,
};
#[cfg(feature = "pagination-axum")]
pub use crate::pagination::{
create_link_header, PaginatedJson, PaginationQuery, PaginationQueryParams,
};
#[cfg(feature = "pagination-sqlx")]
pub use crate::pagination::{
validate_field_name, PaginateQuery, PaginatedQuery, QueryBuilderExt,
};
#[cfg(all(feature = "repository", not(feature = "pagination")))]
pub use crate::repository::{FilterCondition, FilterOperator, FilterValue, Pagination};
#[cfg(feature = "repository")]
pub use crate::repository::{
OrderDirection, RelationLoader, Repository, RepositoryError, RepositoryErrorKind,
RepositoryOperation, RepositoryResult, SoftDeleteRepository,
};
#[cfg(feature = "handlers")]
pub use crate::handlers::{
ApiError, ApiErrorKind, ApiOperation, CollectionHandler, ItemResponse, ListQuery,
ListResponse, PaginationMeta, ResponseMeta, SoftDeleteHandler, SortOrder, DEFAULT_PER_PAGE,
MAX_PER_PAGE,
};
}