Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

  • None.

0.4.11 (November 18, 2021)

Added

  • util: Add BoxCloneService which is a Clone + Send boxed Service (#615)
  • util: Add ServiceExt::boxed and ServiceExt::boxed_clone for applying the BoxService and BoxCloneService middleware (#616)
  • builder: Add ServiceBuilder::boxed and ServiceBuilder::boxed_clone for applying BoxService and BoxCloneService layers (#616)

Fixed

  • util: Remove redundant F: Clone bound from ServiceExt::map_request (#607)
  • util: Remove unnecessary Debug bounds from impl Debug for BoxService (#617)
  • util: Remove unnecessary Debug bounds from impl Debug for UnsyncBoxService (#617)
  • balance: Remove redundant Req: Clone bound from Clone impls for MakeBalance, and MakeBalanceLayer (#607)
  • balance: Remove redundant Req: Debug bound from Debug impls for MakeBalance, MakeFuture, Balance, and Pool (#607)
  • ready-cache: Remove redundant Req: Debug bound from Debug impl for ReadyCache (#607)
  • steer: Remove redundant Req: Debug bound from Debug impl for Steer (#607)
  • docs: Fix doc(cfg(...)) attributes of PeakEwmaDiscover, and PendingRequestsDiscover (#610)

0.4.10 (October 19, 2021)

  • Fix accidental breaking change when using the rustdoc::broken_intra_doc_links lint (#605)
  • Clarify that tower's minimum supported rust version is 1.46 (#605)

0.4.9 (October 13, 2021)

  • Migrate to pin-project-lite (#595)
  • builder: Implement Layer for ServiceBuilder (#600)
  • builder: Add ServiceBuilder::and_then analogous to ServiceExt::and_then (#601)

0.4.8 (May 28, 2021)

  • builder: Add ServiceBuilder::map_result analogous to ServiceExt::map_result (#583)
  • limit: Add GlobalConcurrencyLimitLayer to allow reusing a concurrency limit across multiple services (#574)

0.4.7 (April 27, 2021)

Added

  • builder: Add ServiceBuilder::check_service to check the request, response, and error types of the output service. (#576)
  • builder: Add ServiceBuilder::check_service_clone to check the output service can be cloned. (#576)

Fixed

  • spawn_ready: Abort spawned background tasks when the SpawnReady service is dropped, fixing a potential task/resource leak (#[581])
  • Fixed broken documentation links (#578)

0.4.6 (February 26, 2021)

Deprecated

  • util: Deprecated ServiceExt::ready_and (renamed to ServiceExt::ready). (#567)
  • util: Deprecated ReadyAnd future (renamed to Ready). (#567)

Added

  • builder: Add ServiceBuilder::layer_fn to add a layer built from a function. (#560)
  • builder: Add ServiceBuilder::map_future for transforming the futures produced by a service. (#559)
  • builder: Add ServiceBuilder::service_fn for applying Layers to an async function using util::service_fn. (#564)
  • util: Add example for service_fn. (#563)
  • util: Add BoxLayer for creating boxed Layer trait objects. (#569)

0.4.5 (February 10, 2021)

Added

  • util: Add ServiceExt::map_future. (#542)
  • builder: Add ServiceBuilder::option_layer to optionally add a layer. (#555)
  • make: Add Shared which lets you implement MakeService by cloning a service. (#533)

Fixed

  • util: Make combinators that contain closures implement Debug. They previously wouldn't since closures never implement Debug. (#552)
  • steer: Implement Clone for Steer. (#554)
  • spawn-ready: SpawnReady now propagates the current tracing span to spawned tasks (#557)
  • Only pull in tracing for the features that need it. (#551)

0.4.4 (January 20, 2021)

Added

  • util: Implement Layer for Either<A, B>. (#531)
  • util: Implement Clone for FilterLayer. (#535)
  • timeout: Implement Clone for TimeoutLayer. (#535)
  • limit: Implement Clone for RateLimitLayer. (#535)

Fixed

  • Added “full” feature which turns on all other features. (#532)
  • spawn-ready: Avoid oneshot allocations. (#538)

0.4.3 (January 13, 2021)

Added

  • filter: Filter::check and AsyncFilter::check methods which check a request against the filter's Predicate (#521)
  • filter: Added get_ref, get_mut, and into_inner methods to Filter and AsyncFilter, allowing access to the wrapped service (#522)
  • util: Added layer associated function to AndThen, Then, MapRequest, MapResponse, and MapResult types. These return a Layer that produces middleware of that type, as a convenience to avoid having to import the Layer type separately. (#524)
  • util: Added missing Clone impls to AndThenLayer, MapRequestLayer, and MapErrLayer, when the mapped function implements Clone (#525)
  • util: Added FutureService::new constructor, with less restrictive bounds than the future_service free function (#523)

0.4.2 (January 11, 2021)

Added

  • Export layer_fn and LayerFn from the tower::layer module. (#516)

Fixed

  • Fix missing Sync implementation for Buffer and ConcurrencyLimit (#518)

0.4.1 (January 7, 2021)

Fixed

  • Updated tower-layer to 0.3.1 to fix broken re-exports.

0.4.0 (January 7, 2021)

This is a major breaking release including a large number of changes. In particular, this release updates tower to depend on Tokio 1.0, and moves all middleware into the tower crate. In addition, Tower 0.4 reworks several middleware APIs, as well as introducing new ones.

This release does not change the core Service or Layer traits, so tower 0.4 still depends on tower-service 0.3 and tower-layer 0.3. This means that tower 0.4 is still compatible with libraries that depend on those crates.

Added

  • make: Added MakeService::into_service and MakeService::as_service for converting MakeServices into Services (#492)
  • steer: Added steer middleware for routing requests to one of a set of services (#426)
  • util: Added MapRequest middleware and ServiceExt::map_request, for applying a function to a request before passing it to the inner service (#435)
  • util: Added MapResponse middleware and ServiceExt::map_response, for applying a function to the Response type of an inner service after its future completes (#435)
  • util: Added MapErr middleware and ServiceExt::map_err, for applying a function to the Error returned by an inner service if it fails (#396)
  • util: Added MapResult middleware and ServiceExt::map_result, for applying a function to the Result returned by an inner service's future regardless of whether it succeeds or fails (#499)
  • util: Added Then middleware and ServiceExt::then, for chaining another future after an inner service's future completes (with a Response or an Error) (#500)
  • util: Added AndThen middleware and ServiceExt::and_then, for chaining another future after an inner service's future completes successfully (#485)
  • util: Added layer_fn, for constructing a Layer from a function taking a Service and returning a different Service (#491)
  • util: Added FutureService, which implements Service for a Future whose Output type is a Service ([#496])
  • util: Added BoxService::layer and UnsyncBoxService::layer, to make constructing layers more ergonomic (#503)
  • layer: Added Layer impl for &Layer (#446)
  • retry: Added Retry::get_ref, Retry::get_mut, and Retry::into_inner to access the inner service (#463)
  • timeout: Added Timeout::get_ref, Timeout::get_mut, and Timeout::into_inner to access the inner service (#463)
  • buffer: Added Clone and Copy impls for BufferLayer (#[493])
  • Several documentation improvements (#442, #444, #445, #449, #487, #490, #506])

Changed

  • All middleware tower-* crates were merged into tower and placed behind feature flags (#432)
  • Updated Tokio dependency to 1.0 (#489)
  • builder: Make ServiceBuilder::service take self by reference rather than by value (#504)
  • reconnect: Return errors from MakeService in the response future, rather than in poll_ready, allowing the reconnect service to be reused when a reconnect fails (#386, #437)
  • discover: Changed Discover to be a sealed trait alias for a TryStream<Item = Change>. Discover implementations are now written by implementing Stream. (#443)
  • load: Renamed the Instrument trait to TrackCompletion (#445)
  • load: Renamed NoInstrument to CompleteOnResponse (#445)
  • balance: Renamed BalanceLayer to MakeBalanceLayer (#449)
  • balance: Renamed BalanceMake to MakeBalance (#449)
  • ready-cache: Changed ready_cache::error::Failed's fmt::Debug impl to require the key type to also implement fmt::Debug (#467)
  • filter: Changed Filter and Predicate to use a synchronous function as a predicate (#508)
  • filter: Renamed the previous Filter and Predicate (where Predicates returned a Future) to AsyncFilter and AsyncPredicate (#508)
  • filter: Predicates now take a Request type by value and may return a new request, potentially of a different type (#508)
  • filter: Predicates may now return an error of any type (#508)

Fixed

  • limit: Fixed an issue where RateLimit services do not reset the remaining count when rate limiting (#438, [#439])
  • util: Fixed a bug where oneshot futures panic if the service does not immediately become ready (#447)
  • ready-cache: Fixed ready_cache::error::Failed not returning inner error types via Error::source (#467)
  • hedge: Fixed an interaction with buffer where buffer slots were eagerly reserved for hedge requests even if they were not sent (#472)
  • hedge: Fixed the use of a fixed 10 second bound on the hedge latency histogram resulting on errors with longer-lived requests. The latency histogram now automatically resizes (#484)
  • buffer: Fixed an issue where tasks waiting for buffer capacity were not woken when a buffer is dropped, potentially resulting in a task leak (#480)

Removed

  • Remove ServiceExt::ready.
  • discover: Removed discover::stream module, since Discover is now an alias for Stream (#443)
  • buffer: Removed MakeBalance::from_rng, which caused all balancers to use the same RNG (#497)

0.3.1 (January 17, 2020)

  • Allow opting out of tracing/log (#410).

0.3.0 (December 19, 2019)

  • Update all tower based crates to 0.3.
  • Update to tokio 0.2
  • Update to futures 0.3

0.3.0-alpha.2 (September 30, 2019)

  • Move to futures-*-preview 0.3.0-alpha.19
  • Move to pin-project 0.4

0.3.0-alpha.1a (September 13, 2019)

  • Update tower-buffer to 0.3.0-alpha.1b

0.3.0-alpha.1 (September 11, 2019)

  • Move to std::future

0.1.1 (July 19, 2019)

  • Add ServiceBuilder::into_inner

0.1.0 (April 26, 2019)

  • Initial release