rustapi_core/
lib.rs

1//! # RustAPI Core
2//!
3//! Core library providing the foundational types and traits for RustAPI.
4//!
5//! This crate provides the essential building blocks for the RustAPI web framework:
6//!
7//! - **Application Builder**: [`RustApi`] - The main entry point for building web applications
8//! - **Routing**: [`Router`], [`get`], [`post`], [`put`], [`patch`], [`delete`] - HTTP routing primitives
9//! - **Extractors**: [`Json`], [`Query`], [`Path`], [`State`], [`Body`], [`Headers`] - Request data extraction
10//! - **Responses**: [`IntoResponse`], [`Created`], [`NoContent`], [`Html`], [`Redirect`] - Response types
11//! - **Middleware**: [`BodyLimitLayer`], [`RequestIdLayer`], [`TracingLayer`] - Request processing layers
12//! - **Error Handling**: [`ApiError`], [`Result`] - Structured error responses
13//! - **Testing**: `TestClient` - Integration testing without network binding (requires `test-utils` feature)
14//!
15//! ## Quick Start
16//!
17//! ```rust,ignore
18//! use rustapi_core::{RustApi, get, Json};
19//! use serde::Serialize;
20//!
21//! #[derive(Serialize)]
22//! struct Message {
23//!     text: String,
24//! }
25//!
26//! async fn hello() -> Json<Message> {
27//!     Json(Message { text: "Hello, World!".to_string() })
28//! }
29//!
30//! #[tokio::main]
31//! async fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
32//!     RustApi::new()
33//!         .route("/", get(hello))
34//!         .run("127.0.0.1:8080")
35//!         .await
36//! }
37//! ```
38//!
39//! ## Feature Flags
40//!
41//! - `metrics` - Enable Prometheus metrics middleware
42//! - `cookies` - Enable cookie parsing extractor
43//! - `test-utils` - Enable testing utilities like `TestClient`
44//! - `swagger-ui` - Enable Swagger UI documentation endpoint
45//!
46//! ## Note
47//!
48//! This crate is typically not used directly. Use `rustapi-rs` instead for the
49//! full framework experience with all features and re-exports.
50
51mod app;
52mod error;
53mod extract;
54mod handler;
55pub mod middleware;
56pub mod path_validation;
57mod request;
58mod response;
59mod router;
60mod server;
61pub mod sse;
62pub mod stream;
63#[cfg(any(test, feature = "test-utils"))]
64mod test_client;
65
66// Public API
67pub use app::RustApi;
68pub use error::{get_environment, ApiError, Environment, Result};
69#[cfg(feature = "cookies")]
70pub use extract::Cookies;
71pub use extract::{
72    Body, ClientIp, Extension, FromRequest, FromRequestParts, HeaderValue, Headers, Json, Path,
73    Query, State, ValidatedJson,
74};
75pub use handler::{
76    delete_route, get_route, patch_route, post_route, put_route, Handler, HandlerService, Route,
77    RouteHandler,
78};
79pub use middleware::{BodyLimitLayer, RequestId, RequestIdLayer, TracingLayer, DEFAULT_BODY_LIMIT};
80#[cfg(feature = "metrics")]
81pub use middleware::{MetricsLayer, MetricsResponse};
82pub use request::Request;
83pub use response::{Created, Html, IntoResponse, NoContent, Redirect, Response, WithStatus};
84pub use router::{delete, get, patch, post, put, MethodRouter, Router};
85pub use sse::{Sse, SseEvent};
86pub use stream::StreamBody;
87#[cfg(any(test, feature = "test-utils"))]
88pub use test_client::{TestClient, TestRequest, TestResponse};