ObjectDescriptor

Struct ObjectDescriptor 

Source
pub struct ObjectDescriptor { /* private fields */ }
Expand description

An open object ready to read one or more ranges.

§Example

use google_cloud_storage::{client::Storage, model_ext::ReadRange};
let client = Storage::builder().build().await?;
let open: ObjectDescriptor = client
    .open_object("projects/_/buckets/my-bucket", "my-object")
    .send().await?;
println!("metadata = {:?}", open.object());
// Read 2000 bytes starting at offset 1000.
let mut reader = open.read_range(ReadRange::segment(1000, 2000)).await;
while let Some(data) = reader.next().await.transpose()? {
  println!("received {} bytes", data.len());
}

This is analogous to a “file descriptor”. It represents an object in Cloud Storage that has been “opened” and is ready for more read operations. An object descriptor can have multiple concurrent read operations at a time. You may call read_range() even if previous reads have not completed.

There are no guarantees about the order of the responses. All the data for a read_range() may be returned before any data of earlier read_range() calls, or the data may arrive in any interleaved order. Naturally, the data for a single ranged read arrives in order.

You should actively read from all concurrent reads: the client library uses separate buffers for each read_range() call, but once a buffer is full the library will stop delivering data to all the concurrent reads.

Implementations§

Source§

impl ObjectDescriptor

Source

pub fn object(&self) -> Object

Returns the metadata for the open object.

§Example
let descriptor = open();
println!("object generation = {}", descriptor.object().generation);

fn open() -> ObjectDescriptor {
// ... details omitted ...
}
Source

pub async fn read_range(&self, range: ReadRange) -> ReadObjectResponse

Start reading a range.

§Example
use google_cloud_storage::{model_ext::ReadRange, read_object::ReadObjectResponse};
const MIB: u64 = 1024 * 1024;
let descriptor = open();
println!("object generation = {}", descriptor.object().generation);

// Read 2 MiB starting at offset 0.
let read1 = descriptor.read_range(ReadRange::segment(0, 2 * MIB)).await;
// Concurrently read 2 MiB starting at offset 4 MiB.
let read2 = descriptor.read_range(ReadRange::segment(4 * MIB, 2 * MIB)).await;

let t1 = tokio::spawn(async move { do_read(read1) });
let t2 = tokio::spawn(async move { do_read(read2) });

async fn do_read(mut reader: ReadObjectResponse) {
// ... details omitted ...
}
fn open() -> ObjectDescriptor {
// ... details omitted ...
}
Source

pub fn headers(&self) -> HeaderMap

Returns metadata about the original open_object() request.

§Example
let descriptor = open();
// Often useful when troubleshooting problems with Google Support.
let headers = descriptor.headers();
println!("debugging header = {:?}", headers.get("x-guploader-uploadid"));

fn open() -> ObjectDescriptor {
// ... details omitted ...
}
Source

pub fn new<T>(inner: T) -> Self
where T: ObjectDescriptor + 'static,

Create a new instance.

Application developers should only need to create an ObjectDescriptor in unit tests.

Trait Implementations§

Source§

impl Clone for ObjectDescriptor

Source§

fn clone(&self) -> ObjectDescriptor

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for ObjectDescriptor

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoRequest<T> for T

Source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
Source§

impl<L> LayerExt<L> for L

Source§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in Layered.
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more