use poem::{
endpoint::StaticFilesEndpoint,
listener::{Listener, TcpListener, UnixListener},
Route, Server,
};
#[derive(clap::Parser)]
pub struct Options {
#[clap(long, env = "UDS", default_value = "/tmp/hello_unix.sock")]
uds: String,
#[clap(long, env = "PORT", default_value = "8080")]
port: String,
}
impl Options {
fn port(&self) -> String {
self.port.clone()
}
fn uds(&self) -> String {
self.uds.clone()
}
fn addr(&self) -> String {
format!("0.0.0.0:{}", self.port()).to_string()
}
pub async fn run(&mut self) -> Result<(), anyhow::Error> {
let ser = StaticFilesEndpoint::new(".").show_files_listing();
let app = Route::new().at("*", ser);
std::fs::remove_file(self.uds())?;
dbg!(self.uds());
eprintln!("curl --unix-socket {} http://localhost/path", self.uds());
dbg!(self.addr());
let ln = {
let ln_uds = UnixListener::bind(self.uds());
let ln_tcp = TcpListener::bind(self.addr());
ln_uds.combine(ln_tcp)
};
Ok(Server::new(ln).name("hello").run(app).await?)
}
}