Go to file
Jon Gjengset 395889c763
Make Ready only take Service by reference (#340)
Rather than consuming `self` and returning `(Self, _)`. This did mean
that a few crates that depended on `Ready` to own the `Service` and
provide it once it was ready had to change to call `poll_ready`
directly. Which in turn meant adding in some PhantomData<Request> so
that the impl blocks wouldn't be under-constrainted. Take, for example:

```
impl<K, S: Service<Req>, Req> Future for UnreadyService<K, S>
```

would fail to compile with

```
error[E0207]: the type parameter `Req` is not constrained by the impl trait, self type, or predicates
```
2019-09-11 15:49:51 -04:00
ci spawn-ready: Drives a service's readiness on an executor (#283) 2019-05-29 09:57:46 -07:00
tower Make Ready only take Service by reference (#340) 2019-09-11 15:49:51 -04:00
tower-balance Make Ready only take Service by reference (#340) 2019-09-11 15:49:51 -04:00
tower-buffer Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-discover Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-filter Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-hedge This bumps tower-hedge to 0.3.0-alpha.1 (#334) 2019-09-11 14:00:22 -04:00
tower-layer Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-limit Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-load Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-load-shed Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-make Update tower-reconnect to std::future (#333) 2019-09-10 11:48:01 -04:00
tower-reconnect Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-retry Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-service service: Add changelog entry for 0.3.0-alpha.1 2019-08-20 14:34:30 -04:00
tower-spawn-ready Make Ready only take Service by reference (#340) 2019-09-11 15:49:51 -04:00
tower-test Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-timeout Pin all the alpha based dependencies (#339) 2019-09-11 13:57:27 -04:00
tower-util Make Ready only take Service by reference (#340) 2019-09-11 15:49:51 -04:00
.gitignore Initial commit 2016-08-26 16:26:03 -07:00
Cargo.toml This bumps tower-hedge to 0.3.0-alpha.1 (#334) 2019-09-11 14:00:22 -04:00
LICENSE Update the license for 2019 and tower contributors (#148) 2019-01-15 17:29:08 -05:00
README.md Create `tower-test` and include tower-mock. (#237) 2019-04-07 20:42:18 -07:00
azure-pipelines.yml Update `tower-service` to `std::future::Future` (#311) 2019-08-20 14:31:09 -04:00

README.md

Tower

Tower is a library of modular and reusable components for building robust networking clients and servers.

Build Status Gitter

Overview

Tower aims to make it as easy as possible to build robust networking clients and servers. It is protocol agnostic, but is designed around a request / response pattern. If your protocol is entirely stream based, Tower may not be a good fit.

Project Layout

Tower consists of a number of components, each of which live in their own sub crates.

  • tower: The main user facing crate that provides batteries included tower services (docs).

  • tower-service: The foundational traits upon which Tower is built (docs).

  • tower-layer: The foundational trait to compose services together (docs).

  • tower-balance: A load balancer. Load is balanced across a number of services (docs).

  • tower-buffer: A buffering middleware. If the inner service is not ready to handle the next request, tower-buffer stores the request in an internal queue (docs).

  • tower-discover: Service discovery abstraction (docs).

  • tower-filter: Middleware that conditionally dispatch requests to the inner service based on a predicate (docs).

  • tower-limit: Middleware limiting the number of requests that are processed (docs).

  • tower-reconnect: Middleware that automatically reconnects the inner service when it becomes degraded (docs).

  • tower-retry: Middleware that retries requests based on a given Policy (docs).

  • tower-test: Testing utilies (docs).

  • tower-timeout: Middleware that applies a timeout to requests (docs).

  • tower-util: Miscellaneous additional utilities for Tower (docs).

Status

Currently, only tower-service, the foundational trait, has been released to crates.io. The rest of the library will be following shortly.

License

This project is licensed under the MIT license.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Tower by you, shall be licensed as MIT, without any additional terms or conditions.