pub trait Read: Unpin + Send + Sync {
// Required method
fn read(&mut self) -> impl Future<Output = Result<Buffer>> + MaybeSend;
// Provided method
fn read_all(&mut self) -> impl Future<Output = Result<Buffer>> + MaybeSend { ... }
}
Expand description
Read is the internal trait used by OpenDAL to read data from storage.
Users should not use or import this trait unless they are implementing an Accessor
.
§Notes
§Object Safety
Read
uses async in trait
, making it not object safe, preventing the use of Box<dyn Read>
.
To address this, we’ve introduced ReadDyn
and its compatible type Box<dyn ReadDyn>
.
ReadDyn
uses Box::pin()
to transform the returned future into a BoxedFuture
, introducing
an additional layer of indirection and an extra allocation. Ideally, ReadDyn
should occur only
once, at the outermost level of our API.
Required Methods§
Provided Methods§
Object Safety§
This trait is not object safe.
Implementations on Foreign Types§
source§impl<T: ReadDyn + ?Sized> Read for Box<T>
impl<T: ReadDyn + ?Sized> Read for Box<T>
§NOTE
Take care about the deref_mut()
here. This makes sure that we are calling functions
upon &mut T
instead of &mut Box<T>
. The later could result in infinite recursion.