rustapi_rs/
lib.rs

1//! # RustAPI
2//!
3//! A FastAPI-like web framework for Rust.
4//!
5//! RustAPI combines Rust's performance and safety with FastAPI's "just write business logic"
6//! approach. It provides automatic OpenAPI documentation, declarative validation, and
7//! a developer-friendly experience.
8//!
9//! ## Quick Start
10//!
11//! ```rust,no_run
12//! use rustapi_rs::prelude::*;
13//!
14//! #[derive(Serialize)]
15//! struct Hello {
16//!     message: String,
17//! }
18//!
19//! async fn hello() -> Json<Hello> {
20//!     Json(Hello {
21//!         message: "Hello, World!".to_string(),
22//!     })
23//! }
24//!
25//! #[tokio::main]
26//! async fn main() -> Result<()> {
27//!     RustApi::new()
28//!         .route("/", get(hello))
29//!         .run("127.0.0.1:8080")
30//!         .await
31//! }
32//! ```
33//!
34//! ## Features
35//!
36//! - **DX-First**: Minimal boilerplate, intuitive API
37//! - **Type-Safe**: Compile-time route and schema validation
38//! - **Auto Documentation**: OpenAPI + Swagger UI out of the box
39//! - **Declarative Validation**: Pydantic-style validation on structs
40//! - **Batteries Included**: JWT, CORS, rate limiting (optional features)
41//!
42
43// Re-export core functionality
44pub use rustapi_core::*;
45
46// Re-export macros
47pub use rustapi_macros::*;
48
49/// Prelude module - import everything you need with `use rustapi_rs::prelude::*`
50pub mod prelude {
51    // Core types
52    pub use rustapi_core::{
53        // App builder
54        RustApi,
55        // Router
56        Router,
57        get, post, put, patch, delete,
58        // Route type for macro-based routing
59        Route,
60        get_route, post_route, put_route, patch_route, delete_route,
61        // Extractors
62        Json, Query, Path, State, Body,
63        ValidatedJson,
64        // Response types
65        IntoResponse, Response,
66        Created, NoContent, Html, Redirect,
67        // Error handling
68        ApiError, Result,
69        // Request context
70        Request,
71    };
72
73    // Re-export the route! macro
74    pub use rustapi_core::route;
75
76    // Re-export validation - use validator derive macro directly
77    pub use validator::Validate;
78    
79    // Re-export OpenAPI schema derive
80    pub use rustapi_openapi::{Schema, IntoParams};
81
82    // Re-export commonly used external types
83    pub use serde::{Deserialize, Serialize};
84    pub use tracing::{debug, error, info, trace, warn};
85}
86
87#[cfg(test)]
88mod tests {
89    use super::prelude::*;
90
91    #[test]
92    fn prelude_imports_work() {
93        // This test ensures prelude exports compile correctly
94        let _: fn() -> Result<()> = || Ok(());
95    }
96}