27 lines
776 B
Rust
27 lines
776 B
Rust
use std::net::SocketAddr;
|
|
use hyper::server::conn::AddrStream;
|
|
use axum::extract::connect_info::Connected;
|
|
use axum::serve::IncomingStream;
|
|
|
|
#[derive(Clone, Debug)]
|
|
pub struct AppConnectInfo {
|
|
pub remote_addr: SocketAddr,
|
|
pub local_addr: SocketAddr,
|
|
}
|
|
impl Connected<IncomingStream<'_>> for AppConnectInfo {
|
|
fn connect_info(target: IncomingStream<'_>) -> Self {
|
|
AppConnectInfo {
|
|
remote_addr: target.remote_addr(),
|
|
local_addr: target.local_addr().unwrap_or(target.remote_addr()),
|
|
}
|
|
}
|
|
}
|
|
impl Connected<&AddrStream> for AppConnectInfo {
|
|
fn connect_info(target: &AddrStream) -> Self {
|
|
AppConnectInfo {
|
|
remote_addr: target.remote_addr(),
|
|
local_addr: target.local_addr(),
|
|
}
|
|
}
|
|
}
|