elif_http/
lib.rs

1//! # elif-http
2//! 
3//! HTTP server core for the elif.rs LLM-friendly web framework.
4//! 
5//! This crate provides a NestJS-like HTTP server experience with:
6//! - Clean, intuitive API that abstracts Axum complexity
7//! - Integration with the elif-core DI container
8//! - Built-in middleware pipeline
9//! - Graceful shutdown handling
10//! - Health check endpoints
11//! - Framework-native routing system
12
13pub mod server;
14pub mod config;
15pub mod error;
16pub mod tests;
17pub mod routing;
18pub mod request;
19pub mod response;
20pub mod json;
21pub mod middleware;
22pub mod controller;
23pub mod database;
24
25// Main server API - NestJS-like experience
26pub use server::Server;
27pub use config::HttpConfig;
28pub use error::{HttpError, HttpResult};
29
30// Re-export routing types
31pub use routing::{
32    HttpMethod, RouteInfo, RouteRegistry,
33    ElifRouter, Route, RouteBuilder,
34    PathParams, RouteParam, ParamError, ParamType,
35    RouteGroup, GroupBuilder,
36};
37
38// Re-export request/response types  
39pub use request::{ElifRequest, RequestExtractor, ElifQuery, ElifPath, ElifState};
40pub use response::{ElifResponse, ResponseBody, IntoElifResponse, ElifStatusCode, ElifHeaderMap};
41pub use json::{ElifJson, JsonError, JsonResponse, ValidationErrors, ApiResponse};
42
43// Re-export middleware types
44pub use middleware::{
45    Middleware, MiddlewarePipeline, ErrorHandlingMiddleware,
46    logging::LoggingMiddleware,
47    timing::{TimingMiddleware, RequestStartTime, format_duration},
48    tracing::{TracingMiddleware, TracingConfig, RequestMetadata},
49    timeout::{TimeoutMiddleware, TimeoutConfig, TimeoutInfo, apply_timeout},
50    body_limit::{BodyLimitMiddleware, BodyLimitConfig, BodyLimitInfo, limit_body_size, limits},
51};
52
53// Re-export controller types
54pub use controller::{Controller, BaseController, QueryParams, PaginationMeta};
55
56// Re-export database types
57pub use database::{DatabaseServiceProvider, create_database_pool, get_database_pool, get_named_database_pool};
58
59// Framework-native types - Use these instead of raw Axum types
60// Note: Use Router from routing module, not axum::Router
61// Note: Use ElifJson instead of axum::Json
62// Note: Use ElifResponse instead of axum::Response  
63// Note: HTTP types are available through response/request modules when needed