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}