pub struct Read<B: Blob> { /* private fields */ }
Expand description
A reader that buffers content from a Blob to optimize the performance of a full scan of contents.
§Example
use commonware_runtime::{Runner, buffer::Read, Blob, Error, Storage, deterministic};
let executor = deterministic::Runner::default();
executor.start(|context| async move {
// Open a blob and add some data (e.g., a journal file)
let (blob, size) = context.open("my_partition", b"my_data").await.expect("unable to open blob");
let data = b"Hello, world! This is a test.".to_vec();
let size = data.len() as u64;
blob.write_at(data, 0).await.expect("unable to write data");
// Create a buffer
let buffer = 64 * 1024;
let mut reader = Read::new(blob, size, buffer);
// Read data sequentially
let mut header = [0u8; 16];
reader.read_exact(&mut header, 16).await.expect("unable to read data");
println!("Read header: {:?}", header);
// Position is still at 16 (after header)
assert_eq!(reader.position(), 16);
});
Implementations§
Source§impl<B: Blob> Read<B>
impl<B: Blob> Read<B>
Sourcepub fn new(blob: B, blob_size: u64, buffer_size: usize) -> Self
pub fn new(blob: B, blob_size: u64, buffer_size: usize) -> Self
Creates a new Read
that reads from the given blob with the specified buffer size.
§Panics
Panics if buffer_size
is zero.
Sourcepub fn buffer_remaining(&self) -> usize
pub fn buffer_remaining(&self) -> usize
Returns how many valid bytes are remaining in the buffer.
Sourcepub fn blob_remaining(&self) -> u64
pub fn blob_remaining(&self) -> u64
Returns how many bytes remain in the blob from the current position.
Sourcepub async fn read_exact(
&mut self,
buf: &mut [u8],
size: usize,
) -> Result<(), Error>
pub async fn read_exact( &mut self, buf: &mut [u8], size: usize, ) -> Result<(), Error>
Reads exactly size
bytes into the provided buffer.
Returns an error if not enough bytes are available.
Auto Trait Implementations§
impl<B> Freeze for Read<B>where
B: Freeze,
impl<B> RefUnwindSafe for Read<B>where
B: RefUnwindSafe,
impl<B> Send for Read<B>
impl<B> Sync for Read<B>
impl<B> Unpin for Read<B>where
B: Unpin,
impl<B> UnwindSafe for Read<B>where
B: UnwindSafe,
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
Mutably borrows from an owned value. Read more
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more