Skip to main content

modo/ip/
mod.rs

1//! # modo::ip
2//!
3//! Client IP extraction with trusted proxy support.
4//!
5//! Always available (no feature flag required).
6//!
7//! Provides:
8//! - [`ClientIp`] — axum extractor wrapping `std::net::IpAddr`
9//! - [`ClientIpLayer`] — Tower layer that resolves the client IP and inserts
10//!   [`ClientIp`] into request extensions
11//! - [`extract_client_ip`] — low-level resolution function (headers + trusted
12//!   proxies + fallback)
13//!
14//! ## Quick start
15//!
16//! ```rust,no_run
17//! use axum::{Router, routing::get};
18//! use modo::{ClientIp, ClientIpLayer};
19//!
20//! let app: Router = Router::new()
21//!     .route("/", get(handler))
22//!     .layer(ClientIpLayer::new());
23//!
24//! async fn handler(ClientIp(ip): ClientIp) -> String {
25//!     ip.to_string()
26//! }
27//! ```
28
29mod client_ip;
30mod extract;
31mod middleware;
32
33pub use client_ip::ClientIp;
34pub use extract::extract_client_ip;
35pub use middleware::ClientIpLayer;