1extern crate self as rustapi_rs;
6
7pub use rustapi_macros::*;
9
10#[doc(hidden)]
12pub mod __private {
13 pub use async_trait;
14 pub use rustapi_core as core;
15 pub use rustapi_core::__private::{linkme, AUTO_ROUTES, AUTO_SCHEMAS};
16 pub use rustapi_openapi as openapi;
17 pub use rustapi_validate as validate;
18 pub use serde_json;
19}
20
21pub mod core {
23 pub use rustapi_core::collect_auto_routes;
24 pub use rustapi_core::validation::Validatable;
25 pub use rustapi_core::EventBus;
26 pub use rustapi_core::{
27 delete, delete_route, get, get_route, patch, patch_route, post, post_route, put, put_route,
28 route, serve_dir, sse_from_iter, sse_response, ApiError, AsyncValidatedJson, Body,
29 BodyLimitLayer, BodyStream, BodyVariant, ClientIp, Created, CursorPaginate,
30 CursorPaginated, Environment, Extension, FieldError, FromRequest, FromRequestParts,
31 Handler, HandlerService, HeaderValue, Headers, HealthCheck, HealthCheckBuilder,
32 HealthCheckResult, HealthEndpointConfig, HealthStatus, Html, IntoResponse, Json, KeepAlive,
33 MethodRouter, Multipart, MultipartConfig, MultipartField, NoContent, Paginate, Paginated,
34 Path, ProductionDefaultsConfig, Query, Redirect, Request, RequestId, RequestIdLayer,
35 Response, ResponseBody, Result, Route, RouteHandler, RouteMatch, Router, RustApi,
36 RustApiConfig, Sse, SseEvent, State, StaticFile, StaticFileConfig, StatusCode, StreamBody,
37 StreamingMultipart, StreamingMultipartField, TracingLayer, Typed, TypedPath, UploadedFile,
38 ValidatedJson, WithStatus,
39 };
40
41 pub use rustapi_core::get_environment;
42
43 #[cfg(any(feature = "core-cookies", feature = "cookies"))]
44 pub use rustapi_core::Cookies;
45
46 #[cfg(any(feature = "core-compression", feature = "compression"))]
47 pub use rustapi_core::CompressionLayer;
48
49 #[cfg(any(feature = "core-compression", feature = "compression"))]
50 pub use rustapi_core::middleware::{CompressionAlgorithm, CompressionConfig};
51
52 #[cfg(any(feature = "core-http3", feature = "protocol-http3", feature = "http3"))]
53 pub use rustapi_core::{Http3Config, Http3Server};
54}
55
56pub use core::*;
58
59pub mod protocol {
61 #[cfg(any(feature = "protocol-toon", feature = "toon"))]
62 pub mod toon {
63 pub use rustapi_toon::*;
64 }
65
66 #[cfg(any(feature = "protocol-ws", feature = "ws"))]
67 pub mod ws {
68 pub use rustapi_ws::*;
69 }
70
71 #[cfg(any(feature = "protocol-view", feature = "view"))]
72 pub mod view {
73 pub use rustapi_view::*;
74 }
75
76 #[cfg(any(feature = "protocol-grpc", feature = "grpc"))]
77 pub mod grpc {
78 pub use rustapi_grpc::*;
79 }
80
81 #[cfg(any(feature = "core-http3", feature = "protocol-http3", feature = "http3"))]
82 pub mod http3 {
83 pub use rustapi_core::{Http3Config, Http3Server};
84 }
85}
86
87pub mod extras {
89 #[cfg(any(feature = "extras-jwt", feature = "jwt"))]
90 pub mod jwt {
91 pub use rustapi_extras::jwt;
92 pub use rustapi_extras::{
93 create_token, AuthUser, JwtError, JwtLayer, JwtValidation, ValidatedClaims,
94 };
95 }
96
97 #[cfg(any(feature = "extras-cors", feature = "cors"))]
98 pub mod cors {
99 pub use rustapi_extras::cors;
100 pub use rustapi_extras::{AllowedOrigins, CorsLayer};
101 }
102
103 #[cfg(any(feature = "extras-rate-limit", feature = "rate-limit"))]
104 pub mod rate_limit {
105 pub use rustapi_extras::rate_limit;
106 pub use rustapi_extras::{RateLimitLayer, RateLimitStrategy};
107 }
108
109 #[cfg(any(feature = "extras-config", feature = "config"))]
110 pub mod config {
111 pub use rustapi_extras::config;
112 pub use rustapi_extras::{
113 env_or, env_parse, load_dotenv, load_dotenv_from, require_env, Config, ConfigError,
114 Environment,
115 };
116 }
117
118 #[cfg(any(feature = "extras-sqlx", feature = "sqlx"))]
119 pub mod sqlx {
120 pub use rustapi_extras::{convert_sqlx_error, SqlxErrorExt};
121 }
122
123 #[cfg(any(feature = "extras-insight", feature = "insight"))]
124 pub mod insight {
125 pub use rustapi_extras::insight;
126 }
127
128 #[cfg(any(feature = "extras-timeout", feature = "timeout"))]
129 pub mod timeout {
130 pub use rustapi_extras::timeout;
131 }
132
133 #[cfg(any(feature = "extras-guard", feature = "guard"))]
134 pub mod guard {
135 pub use rustapi_extras::guard;
136 }
137
138 #[cfg(any(feature = "extras-logging", feature = "logging"))]
139 pub mod logging {
140 pub use rustapi_extras::logging;
141 }
142
143 #[cfg(any(feature = "extras-circuit-breaker", feature = "circuit-breaker"))]
144 pub mod circuit_breaker {
145 pub use rustapi_extras::circuit_breaker;
146 }
147
148 #[cfg(any(feature = "extras-retry", feature = "retry"))]
149 pub mod retry {
150 pub use rustapi_extras::retry;
151 }
152
153 #[cfg(any(feature = "extras-security-headers", feature = "security-headers"))]
154 pub mod security_headers {
155 pub use rustapi_extras::security_headers;
156 }
157
158 #[cfg(any(feature = "extras-api-key", feature = "api-key"))]
159 pub mod api_key {
160 pub use rustapi_extras::api_key;
161 }
162
163 #[cfg(any(feature = "extras-cache", feature = "cache"))]
164 pub mod cache {
165 pub use rustapi_extras::cache;
166 }
167
168 #[cfg(any(feature = "extras-dedup", feature = "dedup"))]
169 pub mod dedup {
170 pub use rustapi_extras::dedup;
171 }
172
173 #[cfg(any(feature = "extras-sanitization", feature = "sanitization"))]
174 pub mod sanitization {
175 pub use rustapi_extras::sanitization;
176 }
177
178 #[cfg(any(feature = "extras-otel", feature = "otel"))]
179 pub mod otel {
180 pub use rustapi_extras::otel;
181 }
182
183 #[cfg(any(feature = "extras-structured-logging", feature = "structured-logging"))]
184 pub mod structured_logging {
185 pub use rustapi_extras::structured_logging;
186 }
187
188 #[cfg(any(feature = "extras-replay", feature = "replay"))]
189 pub mod replay {
190 pub use rustapi_core::replay::{
191 RecordedRequest, RecordedResponse, ReplayConfig, ReplayEntry, ReplayId, ReplayMeta,
192 ReplayQuery, ReplayStore, ReplayStoreError, ReplayStoreResult,
193 };
194 pub use rustapi_extras::replay;
195 pub use rustapi_extras::replay::{
196 FsReplayStore, FsReplayStoreConfig, InMemoryReplayStore, ReplayAdminAuth, ReplayClient,
197 ReplayClientError, ReplayLayer, RetentionJob,
198 };
199 }
200
201 #[cfg(any(feature = "extras-oauth2-client", feature = "oauth2-client"))]
202 pub mod oauth2 {
203 pub use rustapi_extras::oauth2;
204 pub use rustapi_extras::{
205 AuthorizationRequest, CsrfState, OAuth2Client, OAuth2Config, PkceVerifier, Provider,
206 TokenError, TokenResponse,
207 };
208 }
209
210 #[cfg(any(feature = "extras-session", feature = "session"))]
211 pub mod session {
212 pub use rustapi_extras::session;
213 pub use rustapi_extras::{
214 MemorySessionStore, Session, SessionConfig, SessionError, SessionLayer, SessionRecord,
215 SessionStore,
216 };
217
218 #[cfg(any(feature = "extras-session-redis", feature = "session-redis"))]
219 pub use rustapi_extras::RedisSessionStore;
220 }
221
222 #[cfg(any(feature = "extras-jobs", feature = "jobs"))]
223 pub mod jobs {
224 pub use rustapi_jobs::{
225 EnqueueOptions, InMemoryBackend, Job, JobBackend, JobContext, JobError, JobQueue,
226 JobRequest,
227 };
228 }
229}
230
231#[cfg(feature = "core-dashboard")]
233pub mod dashboard {
234 pub use rustapi_core::dashboard::{
235 DashboardConfig, DashboardHealthEndpointSnapshot, DashboardHealthSummary,
236 DashboardLiveCountersSnapshot, DashboardMetrics, DashboardReplayIndexSnapshot,
237 DashboardSnapshot, DashboardStageSnapshot, ExecutionPath, RequestStage, RouteGraphSnapshot,
238 RouteGroupSnapshot, RouteInventoryItem, RouteMetricsSnapshot,
239 };
240}
241
242#[cfg(feature = "core-dashboard")]
244pub use rustapi_core::dashboard::{DashboardConfig, DashboardMetrics, DashboardSnapshot};
245#[cfg(any(feature = "protocol-ws", feature = "ws"))]
246#[deprecated(note = "Use rustapi_rs::protocol::ws instead")]
247pub mod ws {
248 pub use crate::protocol::ws::*;
249}
250
251#[cfg(any(feature = "protocol-view", feature = "view"))]
252#[deprecated(note = "Use rustapi_rs::protocol::view instead")]
253pub mod view {
254 pub use crate::protocol::view::*;
255}
256
257#[cfg(any(feature = "protocol-grpc", feature = "grpc"))]
258#[deprecated(note = "Use rustapi_rs::protocol::grpc instead")]
259pub mod grpc {
260 pub use crate::protocol::grpc::*;
261}
262
263#[cfg(any(feature = "extras-jwt", feature = "jwt"))]
265pub use rustapi_extras::jwt;
266#[cfg(any(feature = "extras-jwt", feature = "jwt"))]
267pub use rustapi_extras::{
268 create_token, AuthUser, JwtError, JwtLayer, JwtValidation, ValidatedClaims,
269};
270
271#[cfg(any(feature = "extras-cors", feature = "cors"))]
272pub use rustapi_extras::cors;
273#[cfg(any(feature = "extras-cors", feature = "cors"))]
274pub use rustapi_extras::{AllowedOrigins, CorsLayer};
275
276#[cfg(any(feature = "extras-rate-limit", feature = "rate-limit"))]
277pub use rustapi_extras::rate_limit;
278#[cfg(any(feature = "extras-rate-limit", feature = "rate-limit"))]
279pub use rustapi_extras::{RateLimitLayer, RateLimitStrategy};
280
281#[cfg(any(feature = "extras-config", feature = "config"))]
282pub use rustapi_extras::config;
283#[cfg(any(feature = "extras-config", feature = "config"))]
284pub use rustapi_extras::{
285 env_or, env_parse, load_dotenv, load_dotenv_from, require_env, Config, ConfigError,
286 Environment as ExtrasEnvironment,
287};
288
289#[cfg(any(feature = "extras-sqlx", feature = "sqlx"))]
290pub use rustapi_extras::{convert_sqlx_error, SqlxErrorExt};
291
292#[cfg(any(feature = "extras-api-key", feature = "api-key"))]
293pub use rustapi_extras::api_key;
294#[cfg(any(feature = "extras-cache", feature = "cache"))]
295pub use rustapi_extras::cache;
296#[cfg(any(feature = "extras-circuit-breaker", feature = "circuit-breaker"))]
297pub use rustapi_extras::circuit_breaker;
298#[cfg(any(feature = "extras-dedup", feature = "dedup"))]
299pub use rustapi_extras::dedup;
300#[cfg(any(feature = "extras-guard", feature = "guard"))]
301pub use rustapi_extras::guard;
302#[cfg(any(feature = "extras-logging", feature = "logging"))]
303pub use rustapi_extras::logging;
304#[cfg(any(feature = "extras-otel", feature = "otel"))]
305pub use rustapi_extras::otel;
306#[cfg(any(feature = "extras-replay", feature = "replay"))]
307pub use rustapi_extras::replay;
308#[cfg(any(feature = "extras-retry", feature = "retry"))]
309pub use rustapi_extras::retry;
310#[cfg(any(feature = "extras-sanitization", feature = "sanitization"))]
311pub use rustapi_extras::sanitization;
312#[cfg(any(feature = "extras-security-headers", feature = "security-headers"))]
313pub use rustapi_extras::security_headers;
314#[cfg(any(feature = "extras-structured-logging", feature = "structured-logging"))]
315pub use rustapi_extras::structured_logging;
316#[cfg(any(feature = "extras-timeout", feature = "timeout"))]
317pub use rustapi_extras::timeout;
318
319#[cfg(any(feature = "extras-oauth2-client", feature = "oauth2-client"))]
320pub use rustapi_extras::oauth2;
321#[cfg(any(feature = "extras-oauth2-client", feature = "oauth2-client"))]
322pub use rustapi_extras::{
323 AuthorizationRequest, CsrfState, OAuth2Client, OAuth2Config, PkceVerifier, Provider,
324 TokenError, TokenResponse,
325};
326
327#[cfg(any(feature = "extras-session", feature = "session"))]
328pub use rustapi_extras::session;
329#[cfg(any(feature = "extras-session", feature = "session"))]
330pub use rustapi_extras::{
331 MemorySessionStore, Session, SessionConfig, SessionError, SessionLayer, SessionRecord,
332 SessionStore,
333};
334
335#[cfg(any(feature = "extras-session-redis", feature = "session-redis"))]
336pub use rustapi_extras::RedisSessionStore;
337
338#[cfg(any(feature = "extras-jobs", feature = "jobs"))]
339pub use rustapi_jobs::{
340 EnqueueOptions, InMemoryBackend, Job, JobBackend, JobContext, JobError, JobQueue, JobRequest,
341};
342
343pub mod prelude {
345 pub use crate::core::EventBus;
346 pub use crate::core::Validatable;
347 pub use crate::core::{
348 delete, delete_route, get, get_route, patch, patch_route, post, post_route, put, put_route,
349 route, serve_dir, sse_from_iter, sse_response, ApiError, AsyncValidatedJson, Body,
350 BodyLimitLayer, ClientIp, Created, CursorPaginate, CursorPaginated, Extension, HeaderValue,
351 Headers, HealthCheck, HealthCheckBuilder, HealthCheckResult, HealthEndpointConfig,
352 HealthStatus, Html, IntoResponse, Json, KeepAlive, Multipart, MultipartConfig,
353 MultipartField, NoContent, Paginate, Paginated, Path, ProductionDefaultsConfig, Query,
354 Redirect, Request, RequestId, RequestIdLayer, Response, Result, Route, Router, RustApi,
355 RustApiConfig, Sse, SseEvent, State, StaticFile, StaticFileConfig, StatusCode, StreamBody,
356 StreamingMultipart, StreamingMultipartField, TracingLayer, Typed, TypedPath, UploadedFile,
357 ValidatedJson, WithStatus,
358 };
359
360 #[cfg(any(feature = "core-compression", feature = "compression"))]
361 pub use crate::core::{CompressionAlgorithm, CompressionConfig, CompressionLayer};
362
363 #[cfg(any(feature = "core-cookies", feature = "cookies"))]
364 pub use crate::core::Cookies;
365
366 #[cfg(feature = "core-dashboard")]
367 pub use crate::{DashboardConfig, DashboardMetrics, DashboardSnapshot};
368
369 pub use rustapi_macros::ApiError;
370 pub use rustapi_macros::Schema;
371 pub use rustapi_macros::TypedPath;
372
373 pub use rustapi_validate::v2::AsyncValidate;
374 pub use rustapi_validate::v2::Validate as V2Validate;
375
376 #[cfg(any(feature = "core-legacy-validator", feature = "legacy-validator"))]
377 pub use validator::Validate;
378
379 pub use serde::{Deserialize, Serialize};
380 pub use tracing::{debug, error, info, trace, warn};
381
382 #[cfg(any(feature = "extras-jwt", feature = "jwt"))]
383 pub use crate::{create_token, AuthUser, JwtError, JwtLayer, JwtValidation, ValidatedClaims};
384
385 #[cfg(any(feature = "extras-cors", feature = "cors"))]
386 pub use crate::{AllowedOrigins, CorsLayer};
387
388 #[cfg(any(feature = "extras-rate-limit", feature = "rate-limit"))]
389 pub use crate::{RateLimitLayer, RateLimitStrategy};
390
391 #[cfg(any(feature = "extras-config", feature = "config"))]
392 pub use crate::{
393 env_or, env_parse, load_dotenv, load_dotenv_from, require_env, Config, ConfigError,
394 ExtrasEnvironment,
395 };
396
397 #[cfg(any(feature = "extras-sqlx", feature = "sqlx"))]
398 pub use crate::{convert_sqlx_error, SqlxErrorExt};
399
400 #[cfg(any(feature = "extras-oauth2-client", feature = "oauth2-client"))]
401 pub use crate::{
402 AuthorizationRequest, CsrfState, OAuth2Client, OAuth2Config, PkceVerifier, Provider,
403 TokenError, TokenResponse,
404 };
405
406 #[cfg(any(feature = "extras-session", feature = "session"))]
407 pub use crate::{
408 MemorySessionStore, Session, SessionConfig, SessionError, SessionLayer, SessionRecord,
409 SessionStore,
410 };
411
412 #[cfg(any(feature = "extras-session-redis", feature = "session-redis"))]
413 pub use crate::RedisSessionStore;
414
415 #[cfg(any(feature = "extras-jobs", feature = "jobs"))]
416 pub use crate::{
417 EnqueueOptions, InMemoryBackend, Job, JobBackend, JobContext, JobError, JobQueue,
418 JobRequest,
419 };
420
421 #[cfg(any(feature = "protocol-toon", feature = "toon"))]
422 pub use crate::protocol::toon::{AcceptHeader, LlmResponse, Negotiate, OutputFormat, Toon};
423
424 #[cfg(any(feature = "protocol-ws", feature = "ws"))]
425 pub use crate::protocol::ws::{Broadcast, Message, WebSocket, WebSocketStream};
426
427 #[cfg(any(feature = "protocol-view", feature = "view"))]
428 pub use crate::protocol::view::{ContextBuilder, Templates, TemplatesConfig, View};
429
430 #[cfg(any(feature = "protocol-grpc", feature = "grpc"))]
431 pub use crate::protocol::grpc::{
432 run_concurrently, run_rustapi_and_grpc, run_rustapi_and_grpc_with_shutdown,
433 };
434}
435
436#[cfg(test)]
437mod tests {
438 use super::prelude::*;
439
440 #[test]
441 fn prelude_imports_work() {
442 let _: fn() -> Result<()> = || Ok(());
443 }
444}