From 019129829c2e674ad39cac65c0047ae4015b1b3a Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Fri, 29 Mar 2019 14:28:06 -0700 Subject: [PATCH] Move layer::{LayerExt, Chain, Identity} (#216) - `tower-layer` util types are now in `tower-util`. - `LayerExt` is now in `tower`. This sets the stage for adding layer specific extension fns. --- tower-layer/Cargo.toml | 4 --- tower-layer/src/lib.rs | 12 +++------ tower-layer/src/util/mod.rs | 27 ------------------- tower-util/Cargo.toml | 3 ++- .../util => tower-util/src/layer}/chain.rs | 2 +- .../util => tower-util/src/layer}/identity.rs | 2 +- tower-util/src/layer/mod.rs | 5 ++++ tower-util/src/lib.rs | 2 ++ tower/src/builder/mod.rs | 6 ++--- tower/src/layer.rs | 21 +++++++++++++++ 10 files changed, 37 insertions(+), 47 deletions(-) delete mode 100644 tower-layer/src/util/mod.rs rename {tower-layer/src/util => tower-util/src/layer}/chain.rs (97%) rename {tower-layer/src/util => tower-util/src/layer}/identity.rs (97%) create mode 100644 tower-util/src/layer/mod.rs diff --git a/tower-layer/Cargo.toml b/tower-layer/Cargo.toml index ebefd6e..eaeba1c 100644 --- a/tower-layer/Cargo.toml +++ b/tower-layer/Cargo.toml @@ -22,7 +22,3 @@ tower-service = "0.2.0" [dev-dependencies] void = "1" - -[features] -default = ["util"] -util = [] diff --git a/tower-layer/src/lib.rs b/tower-layer/src/lib.rs index 75e55a9..e36d04e 100644 --- a/tower-layer/src/lib.rs +++ b/tower-layer/src/lib.rs @@ -1,3 +1,6 @@ +#![deny(missing_docs)] +#![doc(html_root_url = "https://docs.rs/tower-layer/0.1.0")] + //! Layer traits and extensions. //! //! A layer decorates an service and provides additional functionality. It @@ -5,18 +8,9 @@ //! //! A middleware implements the [`Layer`] and [`Service`] trait. -#![deny(missing_docs)] -#![doc(html_root_url = "https://docs.rs/tower-layer/0.1.0")] - extern crate futures; extern crate tower_service; -#[cfg(feature = "util")] -pub mod util; - -#[cfg(feature = "util")] -pub use util::LayerExt; - use tower_service::Service; /// Decorates a `Service`, transforming either the request or the response. diff --git a/tower-layer/src/util/mod.rs b/tower-layer/src/util/mod.rs deleted file mode 100644 index d8a1ac6..0000000 --- a/tower-layer/src/util/mod.rs +++ /dev/null @@ -1,27 +0,0 @@ -//! Types and utilities for working with `Layer`. - -use Layer; - -mod chain; -mod identity; - -pub use self::chain::Chain; -pub use self::identity::Identity; - -/// An extension trait for `Layer`'s that provides a variety of convenient -/// adapters. -pub trait LayerExt: Layer { - /// Return a new `Layer` instance that applies both `self` and - /// `middleware` to services being wrapped. - /// - /// This defines a middleware stack. - fn chain(self, middleware: T) -> Chain - where - T: Layer, - Self: Sized, - { - Chain::new(self, middleware) - } -} - -impl LayerExt for T where T: Layer {} diff --git a/tower-util/Cargo.toml b/tower-util/Cargo.toml index 3e861c1..c020eab 100644 --- a/tower-util/Cargo.toml +++ b/tower-util/Cargo.toml @@ -24,8 +24,9 @@ io = ["tokio-io"] [dependencies] either = { version = "1.5.1", optional = true } futures = "0.1.23" -tower-service = "0.2.0" tokio-io = { version = "0.1.12", optional = true } +tower-service = "0.2.0" +tower-layer = { version = "0.1.0", path = "../tower-layer" } [dev-dependencies] tokio-mock-task = "0.1" diff --git a/tower-layer/src/util/chain.rs b/tower-util/src/layer/chain.rs similarity index 97% rename from tower-layer/src/util/chain.rs rename to tower-util/src/layer/chain.rs index b49139e..d2e95c0 100644 --- a/tower-layer/src/util/chain.rs +++ b/tower-util/src/layer/chain.rs @@ -1,5 +1,5 @@ +use tower_layer::Layer; use tower_service::Service; -use Layer; /// Two middlewares chained together. /// diff --git a/tower-layer/src/util/identity.rs b/tower-util/src/layer/identity.rs similarity index 97% rename from tower-layer/src/util/identity.rs rename to tower-util/src/layer/identity.rs index ebf5bdb..1209b86 100644 --- a/tower-layer/src/util/identity.rs +++ b/tower-util/src/layer/identity.rs @@ -1,6 +1,6 @@ use std::fmt; +use tower_layer::Layer; use tower_service::Service; -use Layer; /// A no-op middleware. /// diff --git a/tower-util/src/layer/mod.rs b/tower-util/src/layer/mod.rs new file mode 100644 index 0000000..f1f6c5c --- /dev/null +++ b/tower-util/src/layer/mod.rs @@ -0,0 +1,5 @@ +mod chain; +mod identity; + +pub use self::chain::Chain; +pub use self::identity::Identity; diff --git a/tower-util/src/lib.rs b/tower-util/src/lib.rs index bdd6277..7512d22 100644 --- a/tower-util/src/lib.rs +++ b/tower-util/src/lib.rs @@ -6,12 +6,14 @@ extern crate either as _either; extern crate futures; #[cfg(feature = "io")] extern crate tokio_io; +extern crate tower_layer; extern crate tower_service; mod boxed; mod call_all; #[cfg(feature = "either")] mod either; +pub mod layer; #[cfg(feature = "io")] mod make_connection; mod make_service; diff --git a/tower/src/builder/mod.rs b/tower/src/builder/mod.rs index 795e533..ead2082 100644 --- a/tower/src/builder/mod.rs +++ b/tower/src/builder/mod.rs @@ -4,11 +4,9 @@ mod service; pub use self::service::{LayeredMakeService, ServiceFuture}; -use tower_layer::{ - util::{Chain, Identity}, - Layer, -}; +use tower_layer::Layer; use tower_service::Service; +use tower_util::layer::{Chain, Identity}; use tower_util::MakeService; pub(super) type Error = Box<::std::error::Error + Send + Sync>; diff --git a/tower/src/layer.rs b/tower/src/layer.rs index dd65c84..2e87f55 100644 --- a/tower/src/layer.rs +++ b/tower/src/layer.rs @@ -7,3 +7,24 @@ pub use tower_load_shed::LoadShedLayer; pub use tower_rate_limit::RateLimitLayer; pub use tower_retry::RetryLayer; pub use tower_timeout::TimeoutLayer; + +use tower_layer::Layer; +use tower_util::layer::Chain; + +/// An extension trait for `Layer`'s that provides a variety of convenient +/// adapters. +pub trait LayerExt: Layer { + /// Return a new `Layer` instance that applies both `self` and + /// `middleware` to services being wrapped. + /// + /// This defines a middleware stack. + fn chain(self, middleware: T) -> Chain + where + T: Layer, + Self: Sized, + { + Chain::new(self, middleware) + } +} + +impl LayerExt for T where T: Layer {}