use poem::{handler, http::uri::Uri, listener::TcpListener, Route, Server}; #[derive(clap::Parser)] pub struct Options { #[clap(long, env = "HOST", default_value = "127.0.0.1")] /// Set host host: String, #[clap(short = 'p', long, env = "PORT", default_value = "8080")] /// Set listening port port: String, } impl Options { fn host(&self) -> String { self.host.clone() } fn port(&self) -> String { self.port.clone() } fn hostport(&self) -> String { format!("{}:{}", self.host(), self.port()) } fn url(&self) -> String { format!("http://{}", self.hostport()) } fn addr(&self) -> std::net::SocketAddr { self.hostport().parse().unwrap() } pub async fn run(&mut self) -> Result<(), anyhow::Error> { let app = Route::new().at("*", hello); dbg!(self.url()); Ok(Server::new(TcpListener::bind(self.addr())) .name("hello") .run(app) .await?) } } #[handler] pub fn hello(uri: &Uri) -> String { let rpath = uri.path(); format!("hello, {}", rpath) }