From d7605d318440c4dc38ecce11fcfaa9e34a7a1cb9 Mon Sep 17 00:00:00 2001 From: David Pedersen <david.pdrsn@gmail.com> Date: Mon, 7 Jun 2021 16:31:11 +0200 Subject: [PATCH] Rebuild readme --- README.md | 22 +++++++++++++++++++--- src/lib.rs | 16 +--------------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 787f7a24..171c1a4f 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # tower-web tower-web (name pending) is a tiny web application framework that focuses on -ergonimics and modularity. +ergonomics and modularity. ### Goals @@ -9,7 +9,7 @@ ergonimics and modularity. handle(Request) -> Response`. - Solid foundation. tower-web is built on top of tower and makes it easy to plug in any middleware from the [tower] and [tower-http] ecosystem. -- Focus on routing, extracing data from requests, and generating responses. +- Focus on routing, extracting data from requests, and generating responses. tower middleware can handle the rest. - Macro free core. Macro frameworks have their place but tower-web focuses on providing a core that is macro free. @@ -454,7 +454,6 @@ use tower_web::{prelude::*, routing::BoxRoute, body::BoxBody}; use tower_http::services::ServeFile; use http::Response; use std::convert::Infallible; -use tower::{service_fn, BoxError}; fn api_routes() -> BoxRoute<BoxBody> { route("/users", get(|_: Request<Body>| async { /* ... */ })).boxed() @@ -464,5 +463,22 @@ let app = route("/", get(|_: Request<Body>| async { /* ... */ })) .nest("/api", api_routes()); ``` +`nest` can also be used to serve static files from a directory: + +```rust +use tower_web::{prelude::*, ServiceExt, routing::nest}; +use tower_http::services::ServeDir; +use http::Response; +use std::convert::Infallible; +use tower::{service_fn, BoxError}; + +let app = nest( + "/images", + ServeDir::new("public/images").handle_error(|error: std::io::Error| { + // ... + }) +); +``` + [tower]: https://crates.io/crates/tower [tower-http]: https://crates.io/crates/tower-http diff --git a/src/lib.rs b/src/lib.rs index d792bc30..d7cd93bb 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,5 +1,5 @@ //! tower-web (name pending) is a tiny web application framework that focuses on -//! ergonimics and modularity. +//! ergonomics and modularity. //! //! ## Goals //! @@ -57,7 +57,6 @@ //! async fn get_foo(req: Request<Body>) { //! // `GET /foo` called //! } -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -136,7 +135,6 @@ //! .route("/json", get(json)) //! .route("/result", get(result)) //! .route("/response", get(response)); -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -171,7 +169,6 @@ //! //! // ... //! } -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -192,7 +189,6 @@ //! //! // ... //! } -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -232,7 +228,6 @@ //! //! // ... //! } -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -261,7 +256,6 @@ //! ); //! //! async fn handler(req: Request<Body>) {} -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -282,7 +276,6 @@ //! async fn get_slash(req: Request<Body>) {} //! //! async fn post_foo(req: Request<Body>) {} -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -332,7 +325,6 @@ //! ); //! //! async fn handle(req: Request<Body>) {} -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -359,7 +351,6 @@ //! }); //! //! async fn handle(req: Request<Body>) {} -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -413,7 +404,6 @@ //! Cow::from(format!("Unhandled internal error: {}", error)), //! ); //! }); -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -446,7 +436,6 @@ //! //! // ... //! } -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -483,7 +472,6 @@ //! .handle_error(|error: std::io::Error| { /* ... */ }) //! ) //! ); -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -507,7 +495,6 @@ //! //! let app = route("/", get(|_: Request<Body>| async { /* ... */ })) //! .nest("/api", api_routes()); -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # }; @@ -528,7 +515,6 @@ //! // ... //! }) //! ); -//! # //! # async { //! # hyper::Server::bind(&"".parse().unwrap()).serve(tower::make::Shared::new(app)).await; //! # };