poems/
hello.rs

1use poem::{handler, http::uri::Uri, listener::TcpListener, Route, Server};
2
3#[derive(clap::Parser)]
4pub struct Options {
5    #[clap(long, env = "HOST", default_value = "127.0.0.1")]
6    /// Set host
7    host: String,
8    #[clap(short = 'p', long, env = "PORT", default_value = "8080")]
9    /// Set listening port
10    port: String,
11}
12
13impl Options {
14    fn host(&self) -> String {
15        self.host.clone()
16    }
17    fn port(&self) -> String {
18        self.port.clone()
19    }
20    fn hostport(&self) -> String {
21        format!("{}:{}", self.host(), self.port())
22    }
23    fn url(&self) -> String {
24        format!("http://{}", self.hostport())
25    }
26    fn addr(&self) -> std::net::SocketAddr {
27        self.hostport().parse().unwrap()
28    }
29    pub async fn run(&mut self) -> Result<(), anyhow::Error> {
30        let app = Route::new().at("*", hello);
31        dbg!(self.url());
32        Ok(Server::new(TcpListener::bind(self.addr()))
33            .name("hello")
34            .run(app)
35            .await?)
36    }
37}
38
39#[handler]
40pub fn hello(uri: &Uri) -> String {
41    let rpath = uri.path();
42    format!("hello, {}", rpath)
43}