Crates.io | routerify-unixsocket |
lib.rs | routerify-unixsocket |
version | 3.0.0 |
source | src |
created_at | 2021-03-20 13:51:50.052882 |
updated_at | 2022-01-15 17:22:03.560511 |
description | Use hyperlocal with routerify to add local unix socket support |
homepage | |
repository | https://github.com/routerify/routerify-unixsocket |
max_upload_size | |
id | 371363 |
size | 28,559 |
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.
use hyper::{Body, Response, Server};
use hyperlocal::UnixServerExt;
use routerify::{Error, Router};
use routerify_unixsocket::{UnixRequestExt, UnixRouterService};
use std::{fs, path::Path};
#[tokio::main]
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.