examples!

Signed-off-by: Erik Hollensbe <linux@hollensbe.org>
This commit is contained in:
Erik Hollensbe
2022-01-21 00:26:50 -08:00
parent 6226446239
commit d248927980
2 changed files with 29 additions and 4 deletions
+23
View File
@@ -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<Body>, _resp: Option<Response<Body>>, 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(())
}
+6 -4
View File
@@ -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<Body>| s.dispatch(req));
let tcp_listener = TcpListener::bind(socketaddr).await?;
loop {
let s = self.clone();
let sfn = service_fn(move |req: Request<Body>| {
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()