Uses new Rust 2021
|0.1.3||Jul 4, 2022|
|0.1.2||Mar 16, 2022|
|0.1.1||Feb 24, 2022|
|0.1.0||Feb 14, 2022|
#47 in HTTP client
B2-client - Backend-agnostic Backblaze B2 API Client
B2-client provides a Rust API to Backblaze B2 cloud storage service, backed by any async HTTP client utilizing any async runtime.
The official repository for B2-client is on SourceHut at https://git.sr.ht/~rjframe/b2-client, with a mirror at Github on https://github.com/rjframe/b2-client. Patches/pull requests from both are accepted; all other activity takes place at SourceHut.
Table of Contents
- Getting Started
- Related Projects
B2-client is an async runtime-agnostic, HTTP client-agnostic interface to the Backblaze B2 API. The full B2 API is supported.
Note that most of these functions can incur charges to your account.
All library source code is licensed under the terms of the MPL 2.0 license.
The source code of examples is licensed under the terms of the MIT license.
To use a pre-packaged HTTP client, choose the backend via the relevant feature. Supported features are:
This list will eventually use the lower-level client libraries instead (e.g., h1 instead of hyper).
Add b2-client as a dependency via cargo; for example, to use the Surf HTTP client:
cargo add b2-client --features with_surf
There is no default client, so you must choose one of the above features or use
a custom HTTP client. To use your own HTTP backend, simply implement the
HttpClient trait then pass the struct to
API calls are faked via pre-recorded sessions using the surf backend, so to run
all tests run
cargo test --features=with_surf. No test runs against the live
B2 service by default.
To run a test against the live B2 API, set the environment variables
B2_CLIENT_TEST_KEY_ID to a key/id pair capable of
performing the task you wish to test, and change the test's
Record. Although there will be no major-destructive tests (like deleting all
buckets), don't run a test against the live API unless you know what it's doing,
especially if you have production keys or buckets on your account.
A few tests will need minor modifications or setup to run against the B2 API (e.g., deleting a bucket, changing the bucket ID), and a few tests will not pass their pre-recorded sessions if the environment variables are set.
Error handling is bifurcated a bit; for example, uploading a file without the
WriteFilescapability will return
Error::Unauthorized, but uploading to a private bucket without the
This is due to the fact that we can validate authorization to write prior to making the API call, but cannot pre-validate the authorization to read. This is solveable; it just requires determining the best method to merge them.
Patches and pull requests are welcome. For major features or breaking changes, please open a ticket or start a discussion first so we can discuss what you would like to do.
See CONTRIBUTING.md for pointers on getting set up. If you'd like guidance on anything feel free to ask in a discussion or ticket, or submit a draft PR.