#![deny(unsafe_code)]
#![deny(rustdoc::broken_intra_doc_links)]
pub mod app;
pub mod auth;
pub mod compliance;
pub mod core;
pub mod data;
pub mod docs;
pub mod http;
pub mod messaging;
pub mod observability;
pub mod pipeline;
pub mod realtime;
pub mod resilience;
pub mod testing;
pub mod web;
pub use auth::cookie;
pub use auth::guards;
pub use auth::oauth;
pub use auth::session;
pub use docs::openapi;
pub use messaging::event;
pub use web::security;
pub use web::validation;
pub use core::plugins;
pub use web::cache;
pub use web::interceptors;
#[doc(hidden)]
pub use axum as __axum;
pub use futures;
pub use inventory;
pub use schemars;
pub use serde_json;
pub use validator;
pub use app::{App, LaunchConfig};
pub use web::{Error, RequestContext};
#[doc(hidden)]
#[inline]
pub fn __schema_for<T: schemars::JsonSchema>() -> serde_json::Value {
serde_json::to_value(schemars::schema_for!(T)).unwrap_or(serde_json::Value::Null)
}
#[doc(hidden)]
pub mod __macro_support {
pub use crate::auth::guards::Guard;
pub use crate::auth::policy::check_policies;
pub use crate::compliance::crypto::EncryptRecord;
pub use crate::compliance::masking::mask_response;
pub use crate::core::engine::{
FrozenDiContainer, HttpMethod, Module, ModuleDescriptor, ParamLoc, ParamSpec,
ProviderDescriptor, Resolver, RouteDescriptor, RouteSpec,
};
pub use crate::data::tx::run_transactional;
pub use crate::http::Json;
pub use crate::messaging::{EventContext, EventError, EventHandlerDescriptor};
pub use crate::observability::audit::emit_route_audit;
pub use crate::realtime::gateway::{GatewayDescriptor, GatewayRuntime, MessageHandler};
pub use crate::realtime::{ArclyGateway, WsClient};
pub use crate::resilience::timeout::run_with_timeout;
pub use crate::resilience::{BreakerOpen, CircuitBreaker};
pub use crate::web::context::RequestContext;
pub use crate::web::extract::{
extract_body_validated, extract_header, extract_param, extract_query_validated, Inject,
};
pub use crate::web::idempotency::run_idempotent;
pub use crate::web::interceptors::{Interceptor, NextHandler};
pub use crate::web::Error;
}
pub mod prelude {
pub use crate::app::{App, LaunchConfig};
pub use crate::auth::cookie::{CookieConfig, CookieService, SameSite};
pub use crate::auth::guards::{
JwtAuthGuard, RoleGuard, SessionAuthGuard, JWT_AUTH, SESSION_AUTH,
};
pub use crate::auth::oauth::{OAuth2Provider, OAuth2Service, OAuth2UserInfo};
pub use crate::auth::policy::{
check_policies, Decision, EnvAttributes, PolicyEngine, PolicyInput, PolicySet, PolicySource,
};
pub use crate::auth::secrets::{spawn_secret_watcher, Rotating, SecretSource, SecretVersion};
pub use crate::auth::session::{Session, SessionConfig, SessionManager, SessionStore};
pub use crate::auth::{JwtConfig, JwtService};
pub use crate::cache::{stats as cache_stats, CacheInterceptor, CacheStats};
pub use crate::compliance::{
CryptoError, CryptoVault, DataKey, EncryptRecord, EncryptedField, KekSource, KeyId,
MaskRule, MaskStrategy, Masker, MaskingPolicy,
};
pub use crate::core::engine::FrozenDiContainer;
pub use crate::core::plugins::{ArclyPlugin, ArclyPluginContext, PluginError, PluginStage};
pub use crate::data::db::{ArclyDbPool, DbDriver, DbHealthCheck, OwnedDbConn};
#[cfg(feature = "db-sqlx")]
pub use crate::data::migrate::{Migration, MigrationReport, MigrationRunner};
pub use crate::data::outbox::{
with_transaction, OutboxEntry, OutboxPublisher, OutboxRelay, OutboxStore, OutboxTx,
TransactionalDataSource,
};
pub use crate::data::tx::{in_transaction, with_current_tx, ArclyTransaction};
pub use crate::data::{
AccessIntent, DataError, DataErrorKind, DataSource, DataSourceRegistry, ReadAfterWritePin,
};
pub use crate::http::{IntoResponse, Json, Response};
pub use crate::interceptors::{
EnvelopeResponse, Interceptor, LatencyLog, NextHandler, TelemetryLog, TraceInterceptor,
};
pub use crate::messaging::{
ConsumerRuntime, EventContext, EventHandlerDescriptor, InboundMessage, MessageTransport,
};
pub use crate::observability::audit::{AuditOutcome, AuditPipeline, AuditRecord, AuditSink};
pub use crate::observability::health::{HealthCheck, HealthRegistry, HealthStatus};
pub use crate::observability::plugin::ArclyObservabilityPlugin;
pub use crate::openapi::{ApiKeyIn, OpenApiInfo, SecurityScheme};
pub use crate::pipeline::Provenance;
pub use crate::resilience::{
Bulkhead, DLockBackend, DistributedLock, DistributedRateLimit, FailurePolicy, LockGuard,
RateDecision, RateLimit, RateLimitBackend,
};
pub use crate::security::{configure as configure_security, FrameOptions, SecurityConfig};
pub use crate::validation::Validated;
pub use crate::web::boundary::BoundaryFilter;
pub use crate::web::cors::CorsConfig;
pub use crate::web::dynamic::{DynamicRouteTable, DYNAMIC_PREFIX};
pub use crate::web::error::{
BadRequest, Conflict, FieldError, Forbidden, GatewayTimeout, HttpError, HttpException,
Internal, NotFound, ProblemDetails, ServiceUnavailable, TooManyRequests, Unauthorized,
Validation,
};
pub use crate::web::idempotency::{IdempotencyDecision, IdempotencyStore};
pub use crate::web::responses::{Accepted, Created, NoContent};
pub use crate::web::tenant::{
TenantConfig, TenantGuard, TenantId, TenantRegistry, TenantStrategy, TENANT,
};
pub use crate::web::{Error, Inject, RequestContext};
pub use arcly_http_macros::{
circuit_breaker, AuditLog, CacheKey, CacheTTL, Controller, Delete, Deprecated,
EncryptFields, EventConsumer, EventPattern, Get, Idempotent, Injectable, MaskFields,
Module, Patch, Post, Put, RequirePolicies, Timeout, Transactional, UseInterceptors,
Version,
};
pub use schemars::JsonSchema;
pub use validator::Validate;
}