1mod bootstrap;
9
10pub mod config;
11pub mod core;
12pub mod di;
13pub mod http;
14pub mod logger;
15pub mod router;
16pub mod security;
17pub mod testing;
18pub mod validation;
19
20pub use async_trait;
21
22pub use bootstrap::{bootstrap_app, AppBuilder, ModuleWireRoutes};
23pub use ruest_macros::{
24 controller, delete, dto, get, guard, middleware, module, patch, post, put, routes, service,
25};
26
27pub use core::{bootstrap, CoreError, HttpModule, Module, RuestApplication, RuestFactory};
28pub use di::{Container, Inject, Scope};
29pub use http::{
30 serve, Body, Bytes, ConnectInfo, Form, Json, MatchedPath, Multipart, OriginalUri, Path, Query,
31 State, WebSocket, WebSocketUpgrade,
32};
33pub use http::{ws, Message as WebSocketMessage};
34pub use validation::{Validate, ValidatedJson};
35pub use http::{AppError, AppResult};
36pub use security::{
37 apply_jwt_layer, register_jwt_provider, AuthContext, AuthUser, Guard, JwtDevProvider,
38 JwtGuard, JwtService, RolesGuard, RuestClaims, SecurityConfig, SecurityConfigBuilder,
39 SecurityError,
40};
41
42#[macro_export]
44macro_rules! ruest_err {
45 (BadRequest, $msg:expr) => {
46 $crate::AppError::bad_request($msg)
47 };
48 (NotFound, $msg:expr) => {
49 $crate::AppError::not_found($msg)
50 };
51 (Conflict, $msg:expr) => {
52 $crate::AppError::conflict($msg)
53 };
54 (Internal, $msg:expr) => {
55 $crate::AppError::internal($msg)
56 };
57 (Unauthorized, $msg:expr) => {
58 $crate::AppError::unauthorized($msg)
59 };
60 (Forbidden, $msg:expr) => {
61 $crate::AppError::forbidden($msg)
62 };
63}
64
65pub mod prelude {
67 pub use crate::{
68 apply_jwt_layer, bootstrap_app, controller, delete, get, guard, module, patch, post, put,
69 register_jwt_provider, routes, service, async_trait, ruest_err, AppBuilder, AppError,
70 AppResult, AuthContext, AuthUser, Body, Bytes, ConnectInfo, CoreError, Form, HttpModule,
71 Inject, Json, JwtDevProvider, JwtGuard, JwtService, MatchedPath, Module, ModuleWireRoutes,
72 Multipart, OriginalUri, Path, Query, RolesGuard, RuestApplication, RuestClaims,
73 SecurityConfig, SecurityConfigBuilder, SecurityError, State, Validate, ValidatedJson,
74 WebSocket, WebSocketMessage, WebSocketUpgrade, logger,
75 };
76}
77
78#[cfg(test)]
79mod tests {
80 use super::*;
81 use crate::core::ModuleMetadata;
82
83 struct EmptyModule;
84
85 impl Module for EmptyModule {
86 fn metadata(&self) -> ModuleMetadata {
87 ModuleMetadata::default()
88 }
89 }
90
91 impl ModuleWireRoutes for EmptyModule {
92 fn wire_routes(
93 router: http::axum::Router,
94 _container: &di::Container,
95 ) -> Result<http::axum::Router, di::DiError> {
96 Ok(router)
97 }
98 }
99
100 #[test]
101 fn bootstrap_empty_module() {
102 let _ = bootstrap_app(EmptyModule).expect("bootstrap");
103 }
104}