From d24892798027d75236f5438924be9489319a9dc2 Mon Sep 17 00:00:00 2001 From: Erik Hollensbe Date: Fri, 21 Jan 2022 00:26:50 -0800 Subject: [PATCH] examples! Signed-off-by: Erik Hollensbe --- examples/hello-world.rs | 23 +++++++++++++++++++++++ src/app.rs | 10 ++++++---- 2 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 examples/hello-world.rs diff --git a/examples/hello-world.rs b/examples/hello-world.rs new file mode 100644 index 0000000..b351b2f --- /dev/null +++ b/examples/hello-world.rs @@ -0,0 +1,23 @@ +use http::{Request, Response}; +use hyper::Body; +use ratpack::{app::App, compose_handler, handler::Params, HTTPResult, ServerError}; + +async fn hello(req: Request, _resp: Option>, params: Params) -> HTTPResult { + let name = params.get("name").unwrap(); + let bytes = Body::from(format!("hello, {}\n", name)); + + return Ok(( + req, + Some(Response::builder().status(200).body(bytes).unwrap()), + )); +} + +#[tokio::main] +async fn main() -> Result<(), ServerError> { + let mut app = App::new(); + app.get("/:name", compose_handler!(hello)); + + app.serve("127.0.0.1:3000").await?; + + Ok(()) +} diff --git a/src/app.rs b/src/app.rs index ea26827..6230bdd 100644 --- a/src/app.rs +++ b/src/app.rs @@ -70,14 +70,16 @@ impl App { } } - pub async fn serve(&'static self, addr: String) -> Result<(), ServerError> { + pub async fn serve(self, addr: &str) -> Result<(), ServerError> { let socketaddr: SocketAddr = addr.parse()?; - let s = self.clone(); - let sfn = service_fn(move |req: Request| s.dispatch(req)); - let tcp_listener = TcpListener::bind(socketaddr).await?; loop { + let s = self.clone(); + let sfn = service_fn(move |req: Request| { + let s = s.clone(); + async move { s.clone().dispatch(req).await } + }); let (tcp_stream, _) = tcp_listener.accept().await?; tokio::task::spawn(async move { if let Err(http_err) = Http::new()