This PR is based on the work @alexschrod did in PR #29. All
I did was carry it over the finish line.
This PR adds a feature to the crate named `tokio-runtime`. If
you disable default features and enable this new one, cacache
uses tokio as its async executor. This makes integrating cacache
with tokio-using projects easier, because the file types leak out
if you use anything more than the top-level convenience functions.
The PR implements the feature using shims in a new submodule named
`async_lib`. This module conditionally uses either async-std
or tokio based on feature selection, and hides some differences with
convenience functions.
This change should not be a breaking change, because the default is
still async-std.
There are a few other small changes in this PR worth noting.
- The README shows how to switch runtimes.
- There's a justfile to run common tasks, including those in makefile.toml.
The default shell is `sh`, so this might not work out of the box for
Windows users.
- The tests can now run under either runtime. The justfile has a recipe
that runs them both.
- The benchmarks can also run under either runtime. The justfile has two
recipe for this, one using bench and the other using criterion's runner.
- The dependencies now pull in async-attributes by default along with
async-std. This made it easier to swap runtimes in the tests.
- All dependency versions have been bumped.
Co-authored-by: @alexschrod
Fixes: #13
BREAKING CHANGE: The entire API surface has been rewritten and overhauled. Instead of breaking up the package into get/put/rm/ls modules, everything is now available mostly through the toplevel module, following the same conventions as std:fs for its operations. Associated structs and other types have also been renamed. Please refer to the documentation for the new API, and I hope you find it more ergonomic!
Fixes: #19
BREAKING CHANGE: Error values have changed. If you were inspecting or
matching against actual return values, you'll need to change your code
to use the new enums.
BREAKING CHANGE: the async_* namespaces are gone, and all the previously-sync APIs (get::data, put::data, etc), are all suffixed with _sync now. You'll need to adjust your usage accordingly.