rustapi_extras/
lib.rs

1//! # rustapi-extras
2//!
3//! Optional security and utility features for the RustAPI framework.
4//!
5//! This crate provides production-ready middleware and utilities that are
6//! opt-in via Cargo feature flags to minimize binary size when not needed.
7//!
8//! ## Features
9//!
10//! - `jwt` - JWT authentication middleware and `AuthUser<T>` extractor
11//! - `cors` - CORS middleware with builder pattern configuration
12//! - `rate-limit` - IP-based rate limiting middleware
13//! - `config` - Configuration management with `.env` file support
14//! - `cookies` - Cookie parsing extractor
15//! - `sqlx` - SQLx database error conversion to ApiError
16//! - `insight` - Traffic insight middleware for analytics and debugging
17//! - `extras` - Meta feature enabling jwt, cors, and rate-limit
18//! - `full` - All features enabled
19//!
20//! ## Example
21//!
22//! ```toml
23//! [dependencies]
24//! rustapi-extras = { version = "0.1", features = ["jwt", "cors", "insight"] }
25//! ```
26
27#![warn(missing_docs)]
28#![warn(rustdoc::missing_crate_level_docs)]
29
30// JWT authentication module
31#[cfg(feature = "jwt")]
32pub mod jwt;
33
34// CORS middleware module
35#[cfg(feature = "cors")]
36pub mod cors;
37
38// Rate limiting module
39#[cfg(feature = "rate-limit")]
40pub mod rate_limit;
41
42// Configuration management module
43#[cfg(feature = "config")]
44pub mod config;
45
46// SQLx database integration module
47#[cfg(feature = "sqlx")]
48pub mod sqlx;
49
50// Traffic insight module
51#[cfg(feature = "insight")]
52pub mod insight;
53
54// Re-exports for convenience
55#[cfg(feature = "jwt")]
56pub use jwt::{create_token, AuthUser, JwtError, JwtLayer, JwtValidation, ValidatedClaims};
57
58#[cfg(feature = "cors")]
59pub use cors::{AllowedOrigins, CorsLayer};
60
61#[cfg(feature = "rate-limit")]
62pub use rate_limit::RateLimitLayer;
63
64#[cfg(feature = "config")]
65pub use config::{
66    env_or, env_parse, load_dotenv, load_dotenv_from, require_env, Config, ConfigError, Environment,
67};
68
69#[cfg(feature = "sqlx")]
70pub use sqlx::{convert_sqlx_error, SqlxErrorExt};
71
72#[cfg(feature = "insight")]
73pub use insight::{
74    InMemoryInsightStore, InsightConfig, InsightData, InsightLayer, InsightStats, InsightStore,
75};