| Crates.io | objectstore-client |
| lib.rs | objectstore-client |
| version | 0.0.15 |
| created_at | 2025-10-31 17:41:21.646093+00 |
| updated_at | 2026-01-06 00:45:57.595183+00 |
| description | Client SDK for Objectstore, the Sentry object storage platform |
| homepage | https://getsentry.github.io/objectstore/ |
| repository | https://github.com/getsentry/objectstore |
| max_upload_size | |
| id | 1910410 |
| size | 115,820 |
The client is used to interface with the Objectstore backend. It handles responsibilities like transparent compression, and making sure that uploads and downloads are done as efficiently as possible.
Here's a basic example that shows how to use this client:
use objectstore_client::{Client, Usecase, Result};
async fn example_basic() -> Result<()> {
let client = Client::new("http://localhost:8888/")?;
let session = Usecase::new("attachments")
.for_project(42, 1337)
.session(&client)?;
let response = session.put("Hello, world!")
.send()
.await
.expect("put to succeed");
let object = session
.get(&response.key)
.send()
.await?
.expect("object to exist");
assert_eq!(object.payload().await?, "hello world");
session
.delete(&response.key)
.send()
.await
.expect("delete to succeed");
Ok(())
}
In practice, you would most likely want to store the Client and Usecase
in something like a static and reuse them, like so:
use std::time::Duration;
use std::sync::LazyLock;
use objectstore_client::{Client, Compression, Usecase, Result};
static OBJECTSTORE_CLIENT: LazyLock<Client> = LazyLock::new(|| {
Client::builder("http://localhost:8888/")
// Optionally, propagate tracing headers to use distributed tracing in Sentry
.propagate_traces(true)
// Customize the `reqwest::ClientBuilder`
.configure_reqwest(|builder| {
builder.pool_idle_timeout(Duration::from_secs(90))
.pool_max_idle_per_host(10)
})
.build()
.expect("Objectstore client to build successfully")
});
static ATTACHMENTS: LazyLock<Usecase> = LazyLock::new(|| {
Usecase::new("attachments")
});
async fn example() -> Result<()> {
let session = OBJECTSTORE_CLIENT
.session(ATTACHMENTS.for_project(42, 1337))?;
let response = session.put("Hello, world!").send().await?;
let object = session
.get(&response.key)
.send()
.await?
.expect("object to exist");
assert_eq!(object.payload().await?, "hello world");
session
.delete(&response.key)
.send()
.await
.expect("deletion to succeed");
Ok(())
}
See the API docs for more in-depth documentation.
Like Sentry, Objectstore is licensed under the FSL. See the LICENSE.md file
and this blog post
for more information.