Maker_web v0.1.1: adds `ConnectionFilter` for TCP-level early rejection
⚓ Rust 📅 2025-12-23 👤 surdeus 👁️ 4Version 0.1.1 of maker_web introduces TCP-level connection filtering, giving you more control over which clients can reach your HTTP server.
Main feature: ConnectionFilter trait
The new ConnectionFilter trait allows you to intercept connections before any HTTP parsing begins. This is useful for:
- Early IP filtering/whitelisting
- Implementing custom rate limiting at the TCP layer
- Rejecting unwanted traffic with minimal overhead
Examples
Here's how you can implement a simple IP-based filter:
use std::net::{IpAddr, SocketAddr};
use maker_web::{Server, Handler, ConnectionFilter, Request, Response, Handled, StatusCode};
use tokio::net::TcpListener;
struct MyConnFilter {
blacklist: Vec<IpAddr>
}
impl ConnectionFilter for MyConnFilter {
fn filter(
&self, client_addr: SocketAddr, _: SocketAddr, err_resp: &mut Response
) -> Result<(), Handled> {
if self.blacklist.contains(&client_addr.ip()) {
// Reject with custom response
Err(err_resp
.status(StatusCode::Forbidden)
.body("Your IP is permanently banned"))
} else {
Ok(()) // Accept connection
}
}
}
struct HelloWorld;
impl Handler for HelloWorld {
async fn handle(&self, _: &mut (), _: &Request, resp: &mut Response) -> Handled {
resp.status(StatusCode::Ok)
.header("Content-Type", "text/plain")
.body("Hello, world!")
}
}
#[tokio::main]
async fn main() {
let filter = MyConnFilter {
blacklist: vec![
"192.0.2.1".parse().unwrap(),
"198.51.100.1".parse().unwrap(),
"203.0.113.1".parse().unwrap(),
"10.0.0.1".parse().unwrap(),
]
};
Server::builder()
.listener(TcpListener::bind("127.0.0.1:8080").await.unwrap())
.handler(HelloWorld)
.conn_filter(filter)
.build()
.launch()
.await;
}
Links
- Crate: crates.io: Rust Package Registry
- Docs: maker_web - Rust
- GitHub: GitHub - AmakeSashaDev/maker_web: High-performance, zero-allocation HTTP server for microservices
Your opinion
- What's your opinion about this
ConnectionFilterfeature? - How convenient is this feature's API to use?
- What's your general impression of maker_web's API design?
I'd like to hear your thoughts on this addition. Your opinion is very important to me.
1 post - 1 participant
🏷️ Rust_feed