1use std::future::Future;
9use std::net::SocketAddr;
10use std::pin::Pin;
11
12mod adapters;
13mod app;
14#[cfg(feature = "auth")]
15mod auth;
16#[cfg(feature = "cache")]
17mod cache;
18#[cfg(feature = "compression")]
19mod compression;
20#[cfg(feature = "config")]
21mod config;
22#[cfg(feature = "cqrs")]
23mod cqrs;
24#[cfg(feature = "database")]
25mod database;
26mod discovery;
27mod error;
28#[cfg(feature = "events")]
29mod events;
30#[cfg(feature = "file-upload")]
31mod file_upload;
32#[cfg(feature = "health")]
33mod health;
34mod http;
35#[cfg(feature = "http-client")]
36mod http_client;
37#[cfg(feature = "logging")]
38mod logging;
39mod module;
40mod openapi;
41mod percent;
42mod pipeline;
43mod provider;
44#[cfg(feature = "queue")]
45mod queue;
46mod routing;
47#[cfg(feature = "schedule")]
48mod schedule;
49#[cfg(feature = "security")]
50mod security;
51mod serialization;
52#[cfg(feature = "session")]
53mod session;
54#[cfg(feature = "static")]
55mod static_files;
56mod testing;
57mod transport;
58mod validation;
59mod versioning;
60mod websocket;
61
62#[cfg(feature = "macros")]
63pub use a3s_boot_macros::{
64 all, bearer_auth, body, controller, delete, delete_json, event_pattern, extract, get, get_json,
65 head, header, headers, hide_from_openapi, host, host_param, http_code, injectable, ip,
66 message_controller, message_pattern, metadata, operation, options, param, params, patch,
67 patch_json, post, post_json, put, put_json, query, redirect, request, request_body, response,
68 serialize, skip_validation, sse, subscribe_message, tag, use_filter, use_guard,
69 use_interceptor, use_pipe, validate, version, version_neutral, versions, websocket_gateway,
70};
71#[cfg(all(feature = "macros", feature = "schedule"))]
72pub use a3s_boot_macros::{cron, interval, schedule, timeout};
73#[cfg(all(feature = "macros", feature = "events"))]
74pub use a3s_boot_macros::{event_listener, on_event};
75#[cfg(feature = "axum")]
76pub use adapters::AxumAdapter;
77pub use app::{
78 BootApplication, BootApplicationBuilder, BootApplicationContext, BootApplicationHandle,
79 BootFactory, BootMicroservice, LazyLoadedModule, LazyModuleLoader, RouteMatch,
80};
81#[cfg(feature = "auth")]
82pub use auth::{
83 AuthCredentials, AuthGuard, AuthModule, AuthPrincipal, AuthService, AuthStrategy,
84 AuthStrategyDefinition, BearerAuthStrategy, BearerTokenVerifier, AUTH_PUBLIC_METADATA,
85 AUTH_ROLES_METADATA, AUTH_SCOPES_METADATA, AUTH_STRATEGY_METADATA,
86};
87#[cfg(feature = "cache")]
88pub use cache::{Cache, CacheModule, CacheOptions, CacheStore, InMemoryCacheStore};
89#[cfg(feature = "compression")]
90pub use compression::{CompressionInterceptor, CompressionOptions};
91#[cfg(feature = "config")]
92pub use config::{
93 acl_document_to_json, parse_acl_config, parse_validated_acl_config, ConfigModule,
94};
95#[cfg(feature = "cqrs")]
96pub use cqrs::{
97 Command, CommandBus, CommandHandler, CommandHandlerDefinition, CqrsContext, CqrsEvent,
98 CqrsModule, EventBus, EventHandler, EventHandlerDefinition, Query, QueryBus, QueryHandler,
99 QueryHandlerDefinition,
100};
101#[cfg(feature = "database")]
102pub use database::{
103 Database, DatabaseBackend, DatabaseModule, DatabaseResult, DatabaseRow, DatabaseStatement,
104 DatabaseTransaction, DatabaseTransactionBackend, InMemoryDatabaseBackend,
105 InMemoryDatabaseTransactionLog,
106};
107pub use discovery::{
108 DiscoveredGateway, DiscoveredMessagePattern, DiscoveredModule, DiscoveredRoute,
109 DiscoveryService, Reflector,
110};
111pub use error::{BootError, BootErrorKind};
112#[cfg(feature = "events")]
113pub use events::{
114 EventContext, EventEmitter, EventEnvelope, EventListener, EventListenerDefinition, EventModule,
115};
116#[cfg(feature = "file-upload")]
117pub use file_upload::{MultipartField, MultipartForm, MultipartOptions, UploadedFile};
118#[cfg(feature = "health")]
119pub use health::{
120 HealthCheckService, HealthIndicator, HealthIndicatorResult, HealthModule, HealthReport,
121 HealthStatus,
122};
123pub use http::{
124 extract_request_value, transform_request_value, BootRequest, BootResponse, CookieOptions,
125 CookieSameSite, HttpMethod, RequestExtractor, RequestValuePipe, SseEvent, SseStream,
126};
127#[cfg(feature = "http-client")]
128pub use http_client::{
129 HttpClientBackend, HttpClientOptions, HttpClientRequest, HttpClientResponse, HttpModule,
130 HttpService, ReqwestHttpClientBackend,
131};
132#[cfg(feature = "logging")]
133pub use logging::{
134 InMemoryLogSink, LogFields, LogLevel, LogRecord, LogSink, Logger, LoggingModule, NoopLogSink,
135 RequestLoggingInterceptor, RequestLoggingMiddleware,
136};
137pub use module::{DynamicModule, Module};
138pub use openapi::{
139 openapi_schema_name, OpenApiComponents, OpenApiDocument, OpenApiInfo, OpenApiMediaType,
140 OpenApiOperation, OpenApiParameter, OpenApiParameterLocation, OpenApiPathItem,
141 OpenApiRequestBody, OpenApiResponse, OpenApiRouteMetadata, OpenApiSchema,
142 OpenApiSecurityRequirement, OpenApiTag,
143};
144pub use pipeline::{
145 catch_errors, CatchFilter, ExceptionFilter, ExecutionContext, ExecutionInterceptor,
146 ExecutionProtocol, ExecutionTransportKind, Guard, Interceptor, Middleware, MiddlewareOutcome,
147 Pipe, TransportExecutionContext, WebSocketExecutionContext,
148};
149pub use provider::{
150 FromModuleRef, ModuleRef, ProviderDefinition, ProviderOnApplicationBootstrap,
151 ProviderOnApplicationShutdown, ProviderOnModuleInit, ProviderScope, ProviderToken,
152};
153#[cfg(feature = "queue")]
154pub use queue::{
155 InProcessQueueBackend, Queue, QueueBackend, QueueContext, QueueJob, QueueJobFailure,
156 QueueJobInfo, QueueJobReceipt, QueueJobState, QueueModule, QueueOptions, QueueProcessor,
157 QueueStats,
158};
159pub use routing::{ControllerDefinition, RouteDefinition, RouteHandler};
160#[cfg(feature = "schedule")]
161pub use schedule::{
162 InProcessScheduler, ScheduleContext, ScheduleModule, ScheduleTrigger, ScheduledJob,
163 ScheduledJobError, ScheduledJobInfo, ScheduledTask, Scheduler, SchedulerBackend,
164};
165#[cfg(feature = "security")]
166pub use security::{
167 CorsMiddleware, CorsOptions, CorsPreflightRoute, CorsResponseInterceptor, CsrfGuard,
168 CsrfOptions, RateLimitGuard, RateLimitOptions, SecurityHeadersInterceptor,
169 SecurityHeadersOptions,
170};
171pub use serialization::{SerializationInterceptor, SerializationOptions};
172#[cfg(feature = "session")]
173pub use session::{
174 InMemorySessionStore, SessionCookieInterceptor, SessionCookieSameSite, SessionManager,
175 SessionMiddleware, SessionModule, SessionOptions, SessionStore,
176};
177#[cfg(feature = "static")]
178pub use static_files::{StaticFileOptions, StaticFileService, StaticModule};
179pub use testing::{TestingModule, TestingModuleBuilder};
180#[cfg(feature = "grpc-transport")]
181pub use transport::{GrpcTransport, GrpcTransportClient, GrpcTransportOptions};
182pub use transport::{
183 InProcessTransport, InProcessTransportClient, IntoTransportReply, MessagePatternDefinition,
184 MessagePatternKind, MessageTransport, TransportContext, TransportGuard, TransportInterceptor,
185 TransportMessage, TransportPipe, TransportReply,
186};
187#[cfg(feature = "kafka-transport")]
188pub use transport::{KafkaTransport, KafkaTransportClient, KafkaTransportOptions};
189#[cfg(feature = "mqtt-transport")]
190pub use transport::{MqttTransport, MqttTransportClient, MqttTransportOptions, MqttTransportQoS};
191#[cfg(feature = "nats-transport")]
192pub use transport::{NatsTransport, NatsTransportClient, NatsTransportOptions};
193#[cfg(feature = "rabbitmq-transport")]
194pub use transport::{RabbitMqTransport, RabbitMqTransportClient, RabbitMqTransportOptions};
195#[cfg(feature = "redis-transport")]
196pub use transport::{RedisTransport, RedisTransportClient, RedisTransportOptions};
197#[cfg(feature = "tcp-transport")]
198pub use transport::{TcpTransport, TcpTransportClient, TcpTransportOptions};
199pub use validation::Validate;
200pub(crate) use validation::{
201 body_validator, params_validator, query_validator, validate_value, RequestValidator,
202};
203pub use versioning::{ApiVersioning, ApiVersioningStrategy, RouteVersioning};
204pub use websocket::{
205 IntoWebSocketReply, WebSocketConnection, WebSocketContext, WebSocketGatewayConnection,
206 WebSocketGatewayDefinition, WebSocketGuard, WebSocketInterceptor, WebSocketMessage,
207 WebSocketPipe,
208};
209
210pub type Result<T> = std::result::Result<T, BootError>;
212
213pub type BoxFuture<'a, T> = Pin<Box<dyn Future<Output = T> + Send + 'a>>;
215
216pub trait HttpAdapter {
218 type Output;
219
220 fn build(&self, app: BootApplication) -> Result<Self::Output>;
221
222 fn serve(&self, app: BootApplication, addr: SocketAddr) -> BoxFuture<'static, Result<()>>;
223}