Routerify <> Hyperlocal
Serve unix sockets with routerify
Basic usage works by replacing RouterService
with UnixRouterService
, which adapts the
request in order to be compatible with routerify's RequestService
.
Since routerify requires an IP SocketAddr
, the loopback address 127.0.0.1
with port 0 is used as a placeholder.
In order to access the unix socket's peer address and peer credential, the UnixRequestExt
extension trait adds methods to the request object.
```rust use hyper::{Body, Response, Server}; use hyperlocal::UnixServerExt; use routerify::{Error, Router}; use routerify_unixsocket::{UnixRequestExt, UnixRouterService}; use std::{fs, path::Path};
async fn main() { let path = Path::new("/tmp/hyperlocal.sock"); if path.exists() { fs::remove_file(path).unwrap(); }
let router: Router<Body, Error> = Router::builder()
.get("/", |req| async move {
let s = format!("You are: {:?}", req.unix_peer_cred());
Ok(Response::new(Body::from(s)))
})
.build()
.unwrap();
let service = UnixRouterService::new(router).unwrap();
Server::bind_unix(path)
.unwrap()
.serve(service)
.await
.unwrap()
} ```
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
See CONTRIBUTING.md.