#google #cloud #storage

cloud-storage-lite

A simple, flexible Google Cloud Storage client

10 releases

0.1.9 Apr 29, 2021
0.1.8 Apr 29, 2021
0.1.6 Mar 29, 2021

#15 in #cloud-storage

Download history 17/week @ 2023-07-16 19/week @ 2023-07-23 2/week @ 2023-07-30 27/week @ 2023-08-06 12/week @ 2023-08-13 44/week @ 2023-08-20 24/week @ 2023-08-27 14/week @ 2023-09-03 6/week @ 2023-09-10 14/week @ 2023-09-17 18/week @ 2023-09-24 10/week @ 2023-10-01 7/week @ 2023-10-08 20/week @ 2023-10-15 38/week @ 2023-10-22 132/week @ 2023-10-29

197 downloads per month

MIT license

43KB
923 lines

cloud-storage-lite

A simple, flexible Google Cloud Storage client (GCS).

This library isn't as featureful as, say the cloud-storage crate, but it's also more usable if you:

  • are using a secret keeper like Vault
  • generally work with a single bucket (using a bucket-scoped client)
  • would like to use multiple clients or tokio runtimes in one program
  • want canonicalized errors (404 gets one and only one error variant)

Example

use std::{error::Error, convert::Infallible};
use cloud_storage_lite::{
 self as gcs,
 client::BucketClient,
 token_provider::{
   self,
   oauth::{self, OAuthTokenProvider, ServiceAccount}},
};
use futures::{future, stream, TryStreamExt};

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error + 'static>> {
  let token_provider =
    token_provider::RenewingTokenProvider::new(
      OAuthTokenProvider::new(
        ServiceAccount::read_from_canonical_env()?,
        oauth::SCOPE_STORAGE_FULL_CONTROL,
      )?
    );
  let client = gcs::Client::new(token_provider)
    .into_bucket_client("my-bucket".into());

  client
    .create_object(
      "key",
      stream::once(
        future::ok::<_, Infallible>(b"value".to_vec())
      )
    )
    .await?;

  let object = client.get_object("key").await?;

  let value_bytes = client
    .download_object(&object.name)
    .await?
    .map_ok(|chunk| chunk.to_vec())
    .try_concat()
    .await?;

  println!(
    "the value is: {}",
    String::from_utf8(value_bytes)?
  );

  Ok(())
}

Dependencies

~8–22MB
~357K SLoC