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 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