pub trait Blob:
Clone
+ Send
+ Sync
+ 'static {
// Required methods
fn read_at(
&self,
buf: impl Into<StableBuf> + Send,
offset: u64,
) -> impl Future<Output = Result<StableBuf, Error>> + Send;
fn write_at(
&self,
buf: impl Into<StableBuf> + Send,
offset: u64,
) -> impl Future<Output = Result<(), Error>> + Send;
fn resize(&self, len: u64) -> impl Future<Output = Result<(), Error>> + Send;
fn sync(&self) -> impl Future<Output = Result<(), Error>> + Send;
fn close(self) -> impl Future<Output = Result<(), Error>> + Send;
}
Expand description
Interface to read and write to a blob.
To support blob implementations that enable concurrent reads and writes, blobs are responsible for maintaining synchronization.
Cloning a blob is similar to wrapping a single file descriptor in a lock whereas opening a new blob (of the same name) is similar to opening a new file descriptor. If multiple blobs are opened with the same name, they are not expected to coordinate access to underlying storage and writing to both is undefined behavior.
Required Methods§
Sourcefn read_at(
&self,
buf: impl Into<StableBuf> + Send,
offset: u64,
) -> impl Future<Output = Result<StableBuf, Error>> + Send
fn read_at( &self, buf: impl Into<StableBuf> + Send, offset: u64, ) -> impl Future<Output = Result<StableBuf, Error>> + Send
Read from the blob at the given offset.
read_at
does not return the number of bytes read because it
only returns once the entire buffer has been filled.
Sourcefn write_at(
&self,
buf: impl Into<StableBuf> + Send,
offset: u64,
) -> impl Future<Output = Result<(), Error>> + Send
fn write_at( &self, buf: impl Into<StableBuf> + Send, offset: u64, ) -> impl Future<Output = Result<(), Error>> + Send
Write buf
to the blob at the given offset.
Sourcefn resize(&self, len: u64) -> impl Future<Output = Result<(), Error>> + Send
fn resize(&self, len: u64) -> impl Future<Output = Result<(), Error>> + Send
Resize the blob to the given length.
If the length is greater than the current length, the blob is extended with zeros. If the length is less than the current length, the blob is resized.
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.