pub struct ReadObject<S = Storage>where
S: Storage + 'static,{ /* private fields */ }Expand description
The request builder for Storage::read_object calls.
§Example: accumulate the contents of an object into a vector
use google_cloud_storage::{client::Storage, builder::storage::ReadObject};
async fn sample(client: &Storage) -> anyhow::Result<()> {
let builder: ReadObject = client.read_object("projects/_/buckets/my-bucket", "my-object");
let mut reader = builder.send().await?;
let mut contents = Vec::new();
while let Some(chunk) = reader.next().await.transpose()? {
contents.extend_from_slice(&chunk);
}
println!("object contents={:?}", contents);
Ok(())
}§Example: read part of an object
use google_cloud_storage::{client::Storage, builder::storage::ReadObject};
use google_cloud_storage::model_ext::ReadRange;
async fn sample(client: &Storage) -> anyhow::Result<()> {
const MIB: u64 = 1024 * 1024;
let mut contents = Vec::new();
let mut reader = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.set_read_range(ReadRange::segment(4 * MIB, 2 * MIB))
.send()
.await?;
while let Some(chunk) = reader.next().await.transpose()? {
contents.extend_from_slice(&chunk);
}
println!("range contents={:?}", contents);
Ok(())
}Implementations§
Source§impl<S> ReadObject<S>where
S: Storage + 'static,
impl<S> ReadObject<S>where
S: Storage + 'static,
Sourcepub fn compute_md5(self) -> Self
pub fn compute_md5(self) -> Self
Enables computation of MD5 hashes.
Crc32c hashes are checked by default.
Checksum validation is supported iff:
- The full content is requested.
- All of the content is returned (status != PartialContent).
- The server sent a checksum header.
- The http stack did not uncompress the file.
- The server did not uncompress data on read.
§Example
let builder = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.compute_md5();
let mut reader = builder
.send()
.await?;
let mut contents = Vec::new();
while let Some(chunk) = reader.next().await.transpose()? {
contents.extend_from_slice(&chunk);
}
println!("object contents={:?}", contents);Sourcepub fn set_generation<T: Into<i64>>(self, v: T) -> Self
pub fn set_generation<T: Into<i64>>(self, v: T) -> Self
If present, selects a specific revision of this object (as opposed to the latest version, the default).
Sourcepub fn set_if_generation_match<T>(self, v: T) -> Self
pub fn set_if_generation_match<T>(self, v: T) -> Self
Makes the operation conditional on whether the object’s current generation matches the given value. Setting to 0 makes the operation succeed only if there are no live versions of the object.
Sourcepub fn set_if_generation_not_match<T>(self, v: T) -> Self
pub fn set_if_generation_not_match<T>(self, v: T) -> Self
Makes the operation conditional on whether the object’s live generation does not match the given value. If no live object exists, the precondition fails. Setting to 0 makes the operation succeed only if there is a live version of the object.
Sourcepub fn set_if_metageneration_match<T>(self, v: T) -> Self
pub fn set_if_metageneration_match<T>(self, v: T) -> Self
Makes the operation conditional on whether the object’s current metageneration matches the given value.
Sourcepub fn set_if_metageneration_not_match<T>(self, v: T) -> Self
pub fn set_if_metageneration_not_match<T>(self, v: T) -> Self
Makes the operation conditional on whether the object’s current metageneration does not match the given value.
Sourcepub fn set_read_range(self, range: ReadRange) -> Self
pub fn set_read_range(self, range: ReadRange) -> Self
The range of bytes to return in the read.
This can be all the bytes starting at a given offset
(ReadRange::offset()), all the bytes in an explicit range
(Range::segment), or the last N bytes of the object
(ReadRange::tail).
§Examples
Read starting at 100 bytes to end of file.
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.set_read_range(ReadRange::offset(100))
.send()
.await?;
println!("response details={response:?}");Read last 100 bytes of file:
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.set_read_range(ReadRange::tail(100))
.send()
.await?;
println!("response details={response:?}");Read bytes 1000 to 1099.
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.set_read_range(ReadRange::segment(1000, 100))
.send()
.await?;
println!("response details={response:?}");Sourcepub fn set_key(self, v: KeyAes256) -> Self
pub fn set_key(self, v: KeyAes256) -> Self
The encryption key used with the Customer-Supplied Encryption Keys feature. In raw bytes format (not base64-encoded).
Example:
let key: &[u8] = &[97; 32];
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.set_key(KeyAes256::new(key)?)
.send()
.await?;
println!("response details={response:?}");Sourcepub fn with_retry_policy<V: Into<RetryPolicyArg>>(self, v: V) -> Self
pub fn with_retry_policy<V: Into<RetryPolicyArg>>(self, v: V) -> Self
The retry policy used for this request.
§Example
use google_cloud_storage::retry_policy::RetryableErrors;
use std::time::Duration;
use gax::retry_policy::RetryPolicyExt;
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.with_retry_policy(
RetryableErrors
.with_attempt_limit(5)
.with_time_limit(Duration::from_secs(10)),
)
.send()
.await?;
println!("response details={response:?}");Sourcepub fn with_backoff_policy<V: Into<BackoffPolicyArg>>(self, v: V) -> Self
pub fn with_backoff_policy<V: Into<BackoffPolicyArg>>(self, v: V) -> Self
The backoff policy used for this request.
§Example
use std::time::Duration;
use gax::exponential_backoff::ExponentialBackoff;
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.with_backoff_policy(ExponentialBackoff::default())
.send()
.await?;
println!("response details={response:?}");Sourcepub fn with_retry_throttler<V: Into<RetryThrottlerArg>>(self, v: V) -> Self
pub fn with_retry_throttler<V: Into<RetryThrottlerArg>>(self, v: V) -> Self
The retry throttler used for this request.
Most of the time you want to use the same throttler for all the requests in a client, and even the same throttler for many clients. Rarely it may be necessary to use an custom throttler for some subset of the requests.
§Example
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.with_retry_throttler(adhoc_throttler())
.send()
.await?;
println!("response details={response:?}");
fn adhoc_throttler() -> gax::retry_throttler::SharedRetryThrottler {
}Sourcepub fn with_read_resume_policy<V>(self, v: V) -> Selfwhere
V: ReadResumePolicy + 'static,
pub fn with_read_resume_policy<V>(self, v: V) -> Selfwhere
V: ReadResumePolicy + 'static,
Configure the resume policy for read requests.
The Cloud Storage client library can automatically resume a read that is interrupted by a transient error. Applications may want to limit the number of read attempts, or may wish to expand the type of errors treated as retryable.
§Example
use google_cloud_storage::read_resume_policy::{AlwaysResume, ReadResumePolicyExt};
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.with_read_resume_policy(AlwaysResume.with_attempt_limit(3))
.send()
.await?;Sourcepub fn with_automatic_decompression(self, v: bool) -> Self
pub fn with_automatic_decompression(self, v: bool) -> Self
Enables automatic decompression.
The Cloud Storage service [automatically decompresses] objects
with content_encoding == "gzip" during reads. The client library
disables this behavior by default, as it is not possible to
perform ranged reads or to resume interrupted downloads if automatic
decompression is enabled.
Use this option to enable automatic decompression.
§Example
let response = client
.read_object("projects/_/buckets/my-bucket", "my-object")
.with_automatic_decompression(true)
.send()
.await?;
println!("response details={response:?}");Sourcepub async fn send(self) -> Result<ReadObjectResponse>
pub async fn send(self) -> Result<ReadObjectResponse>
Sends the request.
Trait Implementations§
Source§impl<S> Clone for ReadObject<S>
impl<S> Clone for ReadObject<S>
Source§fn clone(&self) -> ReadObject<S>
fn clone(&self) -> ReadObject<S>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl<S = Storage> !Freeze for ReadObject<S>
impl<S = Storage> !RefUnwindSafe for ReadObject<S>
impl<S> Send for ReadObject<S>
impl<S> Sync for ReadObject<S>
impl<S> Unpin for ReadObject<S>
impl<S = Storage> !UnwindSafe for ReadObject<S>
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> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request