pub struct ObjectClient<'a>(/* private fields */);Expand description
Operations on Objects.
Implementations§
Source§impl<'a> ObjectClient<'a>
 
impl<'a> ObjectClient<'a>
Sourcepub async fn create(
    &self,
    bucket: &str,
    file: Vec<u8>,
    filename: &str,
    mime_type: &str,
) -> Result<Object>
 
pub async fn create( &self, bucket: &str, file: Vec<u8>, filename: &str, mime_type: &str, ) -> Result<Object>
Create a new object. Upload a file as that is loaded in memory to google cloud storage, where it will be interpreted according to the mime type you specified.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let file: Vec<u8> = read_cute_cat("cat.png");
let client = Client::default();
client.object().create("cat-photos", file, "recently read cat.png", "image/png").await?;Sourcepub async fn create_streamed<S>(
    &self,
    bucket: &str,
    stream: S,
    length: impl Into<Option<u64>>,
    filename: &str,
    mime_type: &str,
) -> Result<Object>
 
pub async fn create_streamed<S>( &self, bucket: &str, stream: S, length: impl Into<Option<u64>>, filename: &str, mime_type: &str, ) -> Result<Object>
Create a new object. This works in the same way as ObjectClient::create, except it does not need
to load the entire file in ram.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let client = Client::default();
let file = reqwest::Client::new()
    .get("https://my_domain.rs/nice_cat_photo.png")
    .send()
    .await?
    .bytes_stream();
client.object().create_streamed("cat-photos", file, 10, "recently read cat.png", "image/png").await?;Sourcepub async fn list(
    &self,
    bucket: &'a str,
    list_request: ListRequest,
) -> Result<impl Stream<Item = Result<ObjectList>> + 'a>
 
pub async fn list( &self, bucket: &'a str, list_request: ListRequest, ) -> Result<impl Stream<Item = Result<ObjectList>> + 'a>
Obtain a list of objects within this Bucket.
§Example
use cloud_storage::Client;
use cloud_storage::{Object, ListRequest};
let client = Client::default();
let all_objects = client.object().list("my_bucket", ListRequest::default()).await?;Sourcepub async fn read(&self, bucket: &str, file_name: &str) -> Result<Object>
 
pub async fn read(&self, bucket: &str, file_name: &str) -> Result<Object>
Obtains a single object with the specified name in the specified bucket.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let client = Client::default();
let object = client.object().read("my_bucket", "path/to/my/file.png").await?;Sourcepub async fn download(&self, bucket: &str, file_name: &str) -> Result<Vec<u8>>
 
pub async fn download(&self, bucket: &str, file_name: &str) -> Result<Vec<u8>>
Download the content of the object with the specified name in the specified bucket.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let client = Client::default();
let bytes = client.object().download("my_bucket", "path/to/my/file.png").await?;Sourcepub async fn download_streamed(
    &self,
    bucket: &str,
    file_name: &str,
) -> Result<impl Stream<Item = Result<u8>> + Unpin>
 
pub async fn download_streamed( &self, bucket: &str, file_name: &str, ) -> Result<impl Stream<Item = Result<u8>> + Unpin>
Download the content of the object with the specified name in the specified bucket, without allocating the whole file into a vector.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
use futures_util::stream::StreamExt;
use tokio::fs::File;
use tokio::io::{AsyncWriteExt, BufWriter};
let client = Client::default();
let mut stream = client.object().download_streamed("my_bucket", "path/to/my/file.png").await?;
let mut file = BufWriter::new(File::create("file.png").await.unwrap());
while let Some(byte) = stream.next().await {
    file.write_all(&[byte.unwrap()]).await.unwrap();
}
file.flush().await?;Sourcepub async fn update(&self, object: &Object) -> Result<Object>
 
pub async fn update(&self, object: &Object) -> Result<Object>
Updates a single object with the specified name in the specified bucket with the new
information in object.
Note that if the name or bucket fields are changed, the object will not be found.
See [rewrite] or [copy] for similar operations.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let client = Client::default();
let mut object = client.object().read("my_bucket", "path/to/my/file.png").await?;
object.content_type = Some("application/xml".to_string());
client.object().update(&object).await?;Sourcepub async fn delete(&self, bucket: &str, file_name: &str) -> Result<()>
 
pub async fn delete(&self, bucket: &str, file_name: &str) -> Result<()>
Deletes a single object with the specified name in the specified bucket.
§Example
use cloud_storage::Client;
use cloud_storage::Object;
let client = Client::default();
client.object().delete("my_bucket", "path/to/my/file.png").await?;Sourcepub async fn compose(
    &self,
    bucket: &str,
    req: &ComposeRequest,
    destination_object: &str,
) -> Result<Object>
 
pub async fn compose( &self, bucket: &str, req: &ComposeRequest, destination_object: &str, ) -> Result<Object>
Concatenates the contents of multiple objects into one.
§Example
use cloud_storage::Client;
use cloud_storage::object::{Object, ComposeRequest, SourceObject};
let client = Client::default();
let obj1 = client.object().read("my_bucket", "file1").await?;
let obj2 = client.object().read("my_bucket", "file2").await?;
let compose_request = ComposeRequest {
    kind: "storage#composeRequest".to_string(),
    source_objects: vec![
        SourceObject {
            name: obj1.name.clone(),
            generation: None,
            object_preconditions: None,
        },
        SourceObject {
            name: obj2.name.clone(),
            generation: None,
            object_preconditions: None,
        },
    ],
    destination: None,
};
let obj3 = client.object().compose("my_bucket", &compose_request, "test-concatted-file").await?;
// obj3 is now a file with the content of obj1 and obj2 concatted together.Sourcepub async fn copy(
    &self,
    object: &Object,
    destination_bucket: &str,
    path: &str,
) -> Result<Object>
 
pub async fn copy( &self, object: &Object, destination_bucket: &str, path: &str, ) -> Result<Object>
Copy this object to the target bucket and path.
§Example
use cloud_storage::Client;
use cloud_storage::object::{Object, ComposeRequest};
let client = Client::default();
let obj1 = client.object().read("my_bucket", "file1").await?;
let obj2 = client.object().copy(&obj1, "my_other_bucket", "file2").await?;
// obj2 is now a copy of obj1.Sourcepub async fn rewrite(
    &self,
    object: &Object,
    destination_bucket: &str,
    path: &str,
) -> Result<Object>
 
pub async fn rewrite( &self, object: &Object, destination_bucket: &str, path: &str, ) -> Result<Object>
Moves a file from the current location to the target bucket and path.
§Limitations
This function does not yet support rewriting objects to another
- Geographical Location,
 - Encryption,
 - Storage class. These limitations mean that for now, the rewrite and the copy methods do the same thing.
 
§Example
use cloud_storage::Client;
use cloud_storage::object::Object;
let client = Client::default();
let obj1 = client.object().read("my_bucket", "file1").await?;
let obj2 = client.object().rewrite(&obj1, "my_other_bucket", "file2").await?;
// obj2 is now a copy of obj1.Trait Implementations§
Auto Trait Implementations§
impl<'a> Freeze for ObjectClient<'a>
impl<'a> !RefUnwindSafe for ObjectClient<'a>
impl<'a> Send for ObjectClient<'a>
impl<'a> Sync for ObjectClient<'a>
impl<'a> Unpin for ObjectClient<'a>
impl<'a> !UnwindSafe for ObjectClient<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
 
impl<T> BorrowMut<T> for Twhere
    T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
 
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
 
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
 
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
 
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
 
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more