Rename to awebframework (#13)

This commit is contained in:
David Pedersen
2021-06-13 11:22:02 +02:00
committed by GitHub
parent 27ebb3db7a
commit 1002685a20
20 changed files with 137 additions and 138 deletions
+1 -1
View File
@@ -14,7 +14,7 @@ pub use hyper::body::Body;
/// A boxed [`Body`] trait object.
///
/// This is used in tower-web as the response body type for applications. Its necessary to unify
/// This is used in awebframework as the response body type for applications. Its necessary to unify
/// multiple response bodies types into one.
pub struct BoxBody {
// when we've gotten rid of `BoxStdError` we should be able to change the error type to
+12 -12
View File
@@ -8,7 +8,7 @@
//! deserializes it as JSON into some target type:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use serde::Deserialize;
//!
//! #[derive(Deserialize)]
@@ -34,7 +34,7 @@
//! You can also define your own extractors by implementing [`FromRequest`]:
//!
//! ```rust,no_run
//! use tower_web::{async_trait, extract::FromRequest, prelude::*};
//! use awebframework::{async_trait, extract::FromRequest, prelude::*};
//! use http::{StatusCode, header::{HeaderValue, USER_AGENT}};
//!
//! struct ExtractUserAgent(HeaderValue);
@@ -69,7 +69,7 @@
//! Handlers can also contain multiple extractors:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use std::collections::HashMap;
//!
//! async fn handler(
@@ -94,7 +94,7 @@
//! Wrapping extractors in `Option` will make them optional:
//!
//! ```rust,no_run
//! use tower_web::{extract::Json, prelude::*};
//! use awebframework::{extract::Json, prelude::*};
//! use serde_json::Value;
//!
//! async fn create_user(payload: Option<Json<Value>>) {
@@ -117,7 +117,7 @@
//! directly on the function signature:
//!
//! ```rust,no_run
//! use tower_web::{extract::Json, prelude::*};
//! use awebframework::{extract::Json, prelude::*};
//! use serde_json::Value;
//!
//! async fn create_user(Json(value): Json<Value>) {
@@ -177,7 +177,7 @@ where
/// # Example
///
/// ```rust,no_run
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use serde::Deserialize;
///
/// #[derive(Deserialize)]
@@ -230,7 +230,7 @@ where
/// # Example
///
/// ```rust,no_run
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use serde::Deserialize;
///
/// #[derive(Deserialize)]
@@ -297,7 +297,7 @@ where
/// # Example
///
/// ```rust,no_run
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use serde::Deserialize;
///
/// #[derive(Deserialize)]
@@ -374,7 +374,7 @@ fn has_content_type<B>(req: &Request<B>, expected_content_type: &str) -> bool {
/// # Example
///
/// ```rust,no_run
/// use tower_web::{AddExtensionLayer, prelude::*};
/// use awebframework::{AddExtensionLayer, prelude::*};
/// use std::sync::Arc;
///
/// // Some shared state used throughout our application
@@ -523,7 +523,7 @@ impl FromRequest for HeaderMap {
/// # Example
///
/// ```rust,no_run
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn handler(body: extract::ContentLengthLimit<String, 1024>) {
/// // ...
@@ -570,7 +570,7 @@ where
/// # Example
///
/// ```rust,no_run
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn users_show(params: extract::UrlParamsMap) {
/// let id: Option<&str> = params.get("id");
@@ -626,7 +626,7 @@ impl FromRequest for UrlParamsMap {
/// # Example
///
/// ```rust,no_run
/// use tower_web::{extract::UrlParams, prelude::*};
/// use awebframework::{extract::UrlParams, prelude::*};
/// use uuid::Uuid;
///
/// async fn users_teams_show(
+1 -1
View File
@@ -120,7 +120,7 @@ define_rejection! {
define_rejection! {
#[status = INTERNAL_SERVER_ERROR]
#[body = "No url params found for matched route. This is a bug in tower-web. Please open an issue"]
#[body = "No url params found for matched route. This is a bug in awebframework. Please open an issue"]
/// Rejection type for [`UrlParamsMap`](super::UrlParamsMap) and
/// [`UrlParams`](super::UrlParams) if you try and extract the URL params
/// more than once.
+10 -10
View File
@@ -2,7 +2,7 @@
//!
//! # What is a handler?
//!
//! In tower-web a "handler" is an async function that accepts zero or more
//! In awebframework a "handler" is an async function that accepts zero or more
//! ["extractors"](crate::extract) as arguments and returns something that
//! implements [`IntoResponse`].
//!
@@ -11,7 +11,7 @@
//! Some examples of handlers:
//!
//! ```rust
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use bytes::Bytes;
//! use http::StatusCode;
//!
@@ -65,7 +65,7 @@ pub mod future;
/// # Example
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn handler() {}
///
@@ -104,7 +104,7 @@ where
/// # Example
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn handler() {}
///
@@ -183,7 +183,7 @@ where
/// # Example
///
/// ```rust
/// use tower_web::{handler::on, routing::MethodFilter, prelude::*};
/// use awebframework::{handler::on, routing::MethodFilter, prelude::*};
///
/// async fn handler() {}
///
@@ -242,7 +242,7 @@ pub trait Handler<In>: Sized {
/// can be done like so:
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use tower::limit::{ConcurrencyLimitLayer, ConcurrencyLimit};
///
/// async fn handler() { /* ... */ }
@@ -381,14 +381,14 @@ impl<S, T> Layered<S, T> {
/// Create a new [`Layered`] handler where errors will be handled using the
/// given closure.
///
/// tower-web requires that services gracefully handles all errors. That
/// awebframework requires that services gracefully handles all errors. That
/// means when you apply a Tower middleware that adds a new failure
/// condition you have to handle that as well.
///
/// That can be done using `handle_error` like so:
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use http::StatusCode;
/// use tower::{BoxError, timeout::TimeoutLayer};
/// use std::time::Duration;
@@ -538,7 +538,7 @@ impl<S, F> OnMethod<S, F> {
/// # Example
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn handler() {}
///
@@ -621,7 +621,7 @@ impl<S, F> OnMethod<S, F> {
/// # Example
///
/// ```rust
/// use tower_web::{routing::MethodFilter, prelude::*};
/// use awebframework::{routing::MethodFilter, prelude::*};
///
/// async fn handler() {}
///
+28 -28
View File
@@ -1,28 +1,28 @@
//! tower-web (name pending) is a tiny web application framework that focuses on
//! awebframework (name pending) is a tiny web application framework that focuses on
//! ergonomics and modularity.
//!
//! ## Goals
//!
//! - Ease of use. Building web apps in Rust should be as easy as `async fn
//! handle(Request) -> Response`.
//! - Solid foundation. tower-web is built on top of tower and makes it easy to
//! - Solid foundation. awebframework 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, 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
//! - Macro free core. Macro frameworks have their place but awebframework focuses
//! on providing a core that is macro free.
//!
//! # Compatibility
//!
//! tower-web is designed to work with [tokio] and [hyper]. Runtime and
//! awebframework is designed to work with [tokio] and [hyper]. Runtime and
//! transport layer independence is not a goal, at least for the time being.
//!
//! # Example
//!
//! The "Hello, World!" of tower-web is:
//! The "Hello, World!" of awebframework is:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use hyper::Server;
//! use std::net::SocketAddr;
//! use tower::make::Shared;
@@ -45,7 +45,7 @@
//! Routing between handlers looks like this:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//!
//! let app = route("/", get(get_slash).post(post_slash))
//! .route("/foo", get(get_foo));
@@ -75,7 +75,7 @@
//! returned from a handler:
//!
//! ```rust,no_run
//! use tower_web::{body::Body, response::{Html, Json}, prelude::*};
//! use awebframework::{body::Body, response::{Html, Json}, prelude::*};
//! use http::{StatusCode, Response, Uri};
//! use serde_json::{Value, json};
//!
@@ -157,7 +157,7 @@
//! body and deserializes it as JSON into some target type:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use serde::Deserialize;
//!
//! let app = route("/users", post(create_user));
@@ -183,7 +183,7 @@
//! [`Uuid`]:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use uuid::Uuid;
//!
//! let app = route("/users/:id", post(create_user));
@@ -204,7 +204,7 @@
//! You can also apply multiple extractors:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use uuid::Uuid;
//! use serde::Deserialize;
//!
@@ -239,7 +239,7 @@
//! Additionally `Request<Body>` is itself an extractor:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//!
//! let app = route("/users/:id", post(handler));
//!
@@ -260,7 +260,7 @@
//!
//! # Applying middleware
//!
//! tower-web is designed to take full advantage of the tower and tower-http
//! awebframework is designed to take full advantage of the tower and tower-http
//! ecosystem of middleware:
//!
//! ## Applying middleware to individual handlers
@@ -268,7 +268,7 @@
//! A middleware can be applied to a single handler like so:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::limit::ConcurrencyLimitLayer;
//!
//! let app = route(
@@ -287,7 +287,7 @@
//! Middleware can also be applied to a group of routes like so:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::limit::ConcurrencyLimitLayer;
//!
//! let app = route("/", get(get_slash))
@@ -304,7 +304,7 @@
//!
//! ## Error handling
//!
//! tower-web requires all errors to be handled. That is done by using
//! awebframework requires all errors to be handled. That is done by using
//! [`std::convert::Infallible`] as the error type in all its [`Service`]
//! implementations.
//!
@@ -313,11 +313,11 @@
//! [`IntoResponse`](response::IntoResponse), even if its a `Result`.
//!
//! However middleware might add new failure cases that has to be handled. For
//! that tower-web provides a [`handle_error`](handler::Layered::handle_error)
//! that awebframework provides a [`handle_error`](handler::Layered::handle_error)
//! combinator:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::{
//! BoxError, timeout::{TimeoutLayer, error::Elapsed},
//! };
@@ -359,7 +359,7 @@
//! group of routes with middleware applied:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::{BoxError, timeout::TimeoutLayer};
//! use std::time::Duration;
//!
@@ -383,7 +383,7 @@
//! [`tower::ServiceBuilder`] can be used to combine multiple middleware:
//!
//! ```rust,no_run
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::{
//! ServiceBuilder, BoxError,
//! load_shed::error::Overloaded,
@@ -439,7 +439,7 @@
//! and the [`extract::Extension`] extractor:
//!
//! ```rust,no_run
//! use tower_web::{AddExtensionLayer, prelude::*};
//! use awebframework::{AddExtensionLayer, prelude::*};
//! use std::sync::Arc;
//!
//! struct State {
@@ -464,10 +464,10 @@
//!
//! # Routing to any [`Service`]
//!
//! tower-web also supports routing to general [`Service`]s:
//! awebframework also supports routing to general [`Service`]s:
//!
//! ```rust,no_run
//! use tower_web::{
//! use awebframework::{
//! // `ServiceExt` adds `handle_error` to any `Service`
//! service::{self, ServiceExt}, prelude::*,
//! };
@@ -505,7 +505,7 @@
//! Applications can be nested by calling [`nest`](routing::nest):
//!
//! ```rust,no_run
//! use tower_web::{prelude::*, routing::BoxRoute, body::BoxBody};
//! use awebframework::{prelude::*, routing::BoxRoute, body::BoxBody};
//! use tower_http::services::ServeFile;
//! use http::Response;
//! use std::convert::Infallible;
@@ -524,7 +524,7 @@
//! [`nest`](routing::nest) can also be used to serve static files from a directory:
//!
//! ```rust,no_run
//! use tower_web::{prelude::*, service::ServiceExt, routing::nest};
//! use awebframework::{prelude::*, service::ServiceExt, routing::nest};
//! use tower_http::services::ServeDir;
//! use http::Response;
//! use std::convert::Infallible;
@@ -543,7 +543,7 @@
//!
//! # Features
//!
//! tower-web uses a set of [feature flags] to reduce the amount of compiled and
//! awebframework uses a set of [feature flags] to reduce the amount of compiled and
//! optional dependencies.
//!
//! The following optional features are available:
@@ -632,7 +632,7 @@ pub use async_trait::async_trait;
pub use tower_http::add_extension::{AddExtension, AddExtensionLayer};
pub mod prelude {
//! Re-exports of important traits, types, and functions used with tower-web. Meant to be glob
//! Re-exports of important traits, types, and functions used with awebframework. Meant to be glob
//! imported.
pub use crate::body::Body;
@@ -667,7 +667,7 @@ pub mod prelude {
/// # Examples
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// # use std::convert::Infallible;
/// # use http::Response;
/// # let service = tower::service_fn(|_: Request<Body>| async {
+1 -1
View File
@@ -198,7 +198,7 @@ where
///
/// ```
/// use serde_json::json;
/// use tower_web::{body::Body, response::{Json, IntoResponse}};
/// use awebframework::{body::Body, response::{Json, IntoResponse}};
/// use http::{Response, header::CONTENT_TYPE};
///
/// let json = json!({
+11 -11
View File
@@ -89,7 +89,7 @@ pub trait RoutingDsl: crate::sealed::Sealed + Sized {
/// # Example
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// async fn first_handler() { /* ... */ }
///
@@ -133,7 +133,7 @@ pub trait RoutingDsl: crate::sealed::Sealed + Sized {
/// return them from functions:
///
/// ```rust
/// use tower_web::{routing::BoxRoute, prelude::*};
/// use awebframework::{routing::BoxRoute, prelude::*};
///
/// async fn first_handler() { /* ... */ }
///
@@ -182,7 +182,7 @@ pub trait RoutingDsl: crate::sealed::Sealed + Sized {
/// routes can be done like so:
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use tower::limit::{ConcurrencyLimitLayer, ConcurrencyLimit};
///
/// async fn first_handler() { /* ... */ }
@@ -208,7 +208,7 @@ pub trait RoutingDsl: crate::sealed::Sealed + Sized {
/// entire app:
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use tower_http::trace::TraceLayer;
///
/// async fn first_handler() { /* ... */ }
@@ -240,7 +240,7 @@ pub trait RoutingDsl: crate::sealed::Sealed + Sized {
/// [`Server`](hyper::server::Server):
///
/// ```
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
///
/// let app = route("/", get(|| async { "Hi!" }));
///
@@ -578,7 +578,7 @@ fn handle_buffer_error(error: BoxError) -> Response<BoxBody> {
Ok(service_error) => {
return Response::builder()
.status(StatusCode::INTERNAL_SERVER_ERROR)
.body(BoxBody::new(Full::from(format!("Service error: {}. This is a bug in tower-web. All inner services should be infallible. Please file an issue", service_error))))
.body(BoxBody::new(Full::from(format!("Service error: {}. This is a bug in awebframework. All inner services should be infallible. Please file an issue", service_error))))
.unwrap();
}
Err(e) => e,
@@ -607,14 +607,14 @@ impl<S> Layered<S> {
/// Create a new [`Layered`] service where errors will be handled using the
/// given closure.
///
/// tower-web requires that services gracefully handles all errors. That
/// awebframework requires that services gracefully handles all errors. That
/// means when you apply a Tower middleware that adds a new failure
/// condition you have to handle that as well.
///
/// That can be done using `handle_error` like so:
///
/// ```rust
/// use tower_web::prelude::*;
/// use awebframework::prelude::*;
/// use http::StatusCode;
/// use tower::{BoxError, timeout::TimeoutLayer};
/// use std::time::Duration;
@@ -680,7 +680,7 @@ where
/// nested route will only see the part of URL:
///
/// ```
/// use tower_web::{routing::nest, prelude::*};
/// use awebframework::{routing::nest, prelude::*};
/// use http::Uri;
///
/// async fn users_get(uri: Uri) {
@@ -705,7 +705,7 @@ where
/// captures from the outer routes:
///
/// ```
/// use tower_web::{routing::nest, prelude::*};
/// use awebframework::{routing::nest, prelude::*};
///
/// async fn users_get(params: extract::UrlParamsMap) {
/// // Both `version` and `id` were captured even though `users_api` only
@@ -726,7 +726,7 @@ where
/// [`tower_http::services::ServeDir`] to serve static files from a directory:
///
/// ```
/// use tower_web::{
/// use awebframework::{
/// routing::nest, service::{get, ServiceExt}, prelude::*,
/// };
/// use tower_http::services::ServeDir;
+12 -12
View File
@@ -11,7 +11,7 @@
//!
//! ```
//! use tower_http::services::Redirect;
//! use tower_web::{service, handler, prelude::*};
//! use awebframework::{service, handler, prelude::*};
//!
//! async fn handler(request: Request<Body>) { /* ... */ }
//!
@@ -41,7 +41,7 @@
//! well when your services don't care about backpressure and are always ready
//! anyway.
//!
//! tower-web expects that all services used in your app wont care about
//! awebframework expects that all services used in your app wont care about
//! backpressure and so it uses the latter strategy. However that means you
//! should avoid routing to a service (or using a middleware) that _does_ care
//! about backpressure. At the very least you should [load shed] so requests are
@@ -51,14 +51,14 @@
//! in the response future from `call`, and _not_ from `poll_ready`. In that
//! case the underlying service will _not_ be discarded and will continue to be
//! used for future requests. Services that expect to be discarded if
//! `poll_ready` fails should _not_ be used with tower-web.
//! `poll_ready` fails should _not_ be used with awebframework.
//!
//! One possible approach is to only apply backpressure sensitive middleware
//! around your entire app. This is possible because tower-web applications are
//! around your entire app. This is possible because awebframework applications are
//! themselves services:
//!
//! ```rust
//! use tower_web::prelude::*;
//! use awebframework::prelude::*;
//! use tower::ServiceBuilder;
//! # let some_backpressure_sensitive_middleware =
//! # tower::layer::util::Identity::new();
@@ -137,7 +137,7 @@ where
/// # Example
///
/// ```rust
/// use tower_web::{service, prelude::*};
/// use awebframework::{service, prelude::*};
/// use http::Response;
/// use std::convert::Infallible;
/// use hyper::Body;
@@ -224,7 +224,7 @@ where
/// # Example
///
/// ```rust
/// use tower_web::{handler::on, service, routing::MethodFilter, prelude::*};
/// use awebframework::{handler::on, service, routing::MethodFilter, prelude::*};
/// use http::Response;
/// use std::convert::Infallible;
/// use hyper::Body;
@@ -293,7 +293,7 @@ impl<S, F> OnMethod<S, F> {
/// # Example
///
/// ```rust
/// use tower_web::{handler::on, service, routing::MethodFilter, prelude::*};
/// use awebframework::{handler::on, service, routing::MethodFilter, prelude::*};
/// use http::Response;
/// use std::convert::Infallible;
/// use hyper::Body;
@@ -387,7 +387,7 @@ impl<S, F> OnMethod<S, F> {
/// # Example
///
/// ```rust
/// use tower_web::{handler::on, service, routing::MethodFilter, prelude::*};
/// use awebframework::{handler::on, service, routing::MethodFilter, prelude::*};
/// use http::Response;
/// use std::convert::Infallible;
/// use hyper::Body;
@@ -503,9 +503,9 @@ where
pub trait ServiceExt<B>: Service<Request<Body>, Response = Response<B>> {
/// Handle errors from a service.
///
/// tower-web requires all handlers and services, that are part of the
/// awebframework requires all handlers and services, that are part of the
/// router, to never return errors. If you route to [`Service`], not created
/// by tower-web, who's error isn't `Infallible` you can use this combinator
/// by awebframework, who's error isn't `Infallible` you can use this combinator
/// to handle the error.
///
/// `handle_error` takes a closure that will map errors from the service
@@ -515,7 +515,7 @@ pub trait ServiceExt<B>: Service<Request<Body>, Response = Response<B>> {
/// # Example
///
/// ```rust,no_run
/// use tower_web::{service::{self, ServiceExt}, prelude::*};
/// use awebframework::{service::{self, ServiceExt}, prelude::*};
/// use http::Response;
/// use tower::{service_fn, BoxError};
///
+1 -1
View File
@@ -3,7 +3,7 @@
//! # Example
//!
//! ```
//! use tower_web::{prelude::*, ws::{ws, WebSocket}};
//! use awebframework::{prelude::*, ws::{ws, WebSocket}};
//!
//! let app = route("/ws", ws(handle_socket));
//!