Minimize the required version for each dependency.
I found these versions empirically, by using the following process:
First, I used cargo tree --depth 1 -e all
to get a list of
every immediate dependency we had.
Then, I used cargo upgrade --workspace package@version
to change
each dependency to the earliest version with which (in theory) the
current version is semver-compatible. IOW, if the current version
was 3.2.3, I picked "3". If the current version was 0.12.8, I
picked "0.12".
Then, I used cargo +nightly upgrade -Z minimal-versions
to
downgrade Cargo.lock to the minimal listed version for each
dependency. (I had to override a few packages; see .gitlab-ci.yml
for details).
Finally, I repeatedly increased the version of each of our dependencies until our code compiled and the tests passed. Here's what I found that we need:
anyhow >= 1.0.5: Earlier versions break our hyper example.
async-broadcast >= 0.3.2: Earlier versions fail our tests.
async-compression 0.3.5: Earlier versions handled futures and tokio differently.
async-trait >= 0.1.2: Earlier versions are too buggy to compile our code.
clap 2.33.0: For Arg::default_value_os().
generic-array 0.14.3: Earlier versions don't implement From<&[T; 32]>
httparse >= 1.2: Earlier versions didn't implement Error.
itertools at 0.10.1: For at_most_once.
serde 1.0.103: Older versions break our code.
serde_json >= 1.0.50: Since we need its Value type to implement Eq.
tokio >= 1.4: For Handle::block_on().
tracing >= 0.1.18: Previously, tracing_core and tracing had separate LevelFilter types.
Closes #275 (closed).