pub struct Consumer<T: Send + Sized + 'static> { /* private fields */ }
Expand description
Consumer part of ring buffer.
Implementations§
Source§impl<T: Send + Sized + 'static> Consumer<T>
impl<T: Send + Sized + 'static> Consumer<T>
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns capacity of the ring buffer.
The capacity of the buffer is constant.
Sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Checks if the ring buffer is empty.
The result may become irrelevant at any time because of concurring activity of the producer.
Examples found in repository?
10fn main() {
11 let collector = Collector::new();
12
13 let buf = RingBuffer::<u8>::new(10);
14 let (mut prod, mut cons) = buf.split(&collector.handle());
15
16 let smsg = "The quick brown fox jumps over the lazy dog";
17
18 let pjh = thread::spawn(move || {
19 println!("-> sending message: '{}'", smsg);
20
21 let zero = [0];
22 let mut bytes = smsg.as_bytes().chain(&zero[..]);
23 loop {
24 if prod.is_full() {
25 println!("-> buffer is full, waiting");
26 thread::sleep(Duration::from_millis(1));
27 } else {
28 let n = prod.read_from(&mut bytes, None).unwrap();
29 if n == 0 {
30 break;
31 }
32 println!("-> {} bytes sent", n);
33 }
34 }
35
36 println!("-> message sent");
37 });
38
39 let cjh = thread::spawn(move || {
40 println!("<- receiving message");
41
42 let mut bytes = Vec::<u8>::new();
43 loop {
44 if cons.is_empty() {
45 if bytes.ends_with(&[0]) {
46 break;
47 } else {
48 println!("<- buffer is empty, waiting");
49 thread::sleep(Duration::from_millis(1));
50 }
51 } else {
52 let n = cons.write_into(&mut bytes, None).unwrap();
53 println!("<- {} bytes received", n);
54 }
55 }
56
57 assert_eq!(bytes.pop().unwrap(), 0);
58 let msg = String::from_utf8(bytes).unwrap();
59 println!("<- message received: '{}'", msg);
60
61 msg
62 });
63
64 pjh.join().unwrap();
65 let rmsg = cjh.join().unwrap();
66
67 assert_eq!(smsg, rmsg);
68}
Sourcepub fn is_full(&self) -> bool
pub fn is_full(&self) -> bool
Checks if the ring buffer is full.
The result is relevant until you remove items from the consumer.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
The length of the data stored in the buffer
Actual length may be equal to or greater than the returned value.
Sourcepub fn remaining(&self) -> usize
pub fn remaining(&self) -> usize
The remaining space in the buffer.
Actual remaining space may be equal to or less than the returning value.
Sourcepub fn as_slices(&self) -> (&[T], &[T])
pub fn as_slices(&self) -> (&[T], &[T])
Returns a pair of slices which contain, in order, the contents of the RingBuffer
.
The slices may not include elements pushed to the buffer by concurring producer after the method call.
Sourcepub fn as_mut_slices(&mut self) -> (&mut [T], &mut [T])
pub fn as_mut_slices(&mut self) -> (&mut [T], &mut [T])
Returns a pair of slices which contain, in order, the contents of the RingBuffer
.
The slices may not include elements pushed to the buffer by concurring producer after the method call.
Sourcepub fn access<F: FnOnce(&[T], &[T])>(&self, f: F)
👎Deprecated since 0.2.7: please use as_slices
instead
pub fn access<F: FnOnce(&[T], &[T])>(&self, f: F)
as_slices
insteadGives immutable access to the elements contained by the ring buffer without removing them.
The method takes a function f
as argument.
f
takes two slices of ring buffer contents (the second one or both of them may be empty).
First slice contains older elements.
The slices may not include elements pushed to the buffer by concurring producer after the method call.
Marked deprecated in favor of as_slices
.
Sourcepub fn access_mut<F: FnOnce(&mut [T], &mut [T])>(&mut self, f: F)
👎Deprecated since 0.2.7: please use as_mut_slices
instead
pub fn access_mut<F: FnOnce(&mut [T], &mut [T])>(&mut self, f: F)
as_mut_slices
insteadGives mutable access to the elements contained by the ring buffer without removing them.
The method takes a function f
as argument.
f
takes two slices of ring buffer contents (the second one or both of them may be empty).
First slice contains older elements.
The iteration may not include elements pushed to the buffer by concurring producer after the method call.
Marked deprecated in favor of as_mut_slices
.
Sourcepub unsafe fn pop_access<F>(&mut self, f: F) -> usize
pub unsafe fn pop_access<F>(&mut self, f: F) -> usize
Allows to read from ring buffer memory directly.
This function is unsafe because it gives access to possibly uninitialized memory
The method takes a function f
as argument.
f
takes two slices of ring buffer content (the second one or both of them may be empty).
First slice contains older elements.
f
should return number of elements been read.
There is no checks for returned number - it remains on the developer’s conscience.
The method always calls f
even if ring buffer is empty.
The method returns number returned from f
.
§Safety
The method gives access to ring buffer underlying memory which may be uninitialized.
It’s up to you to copy or drop appropriate elements if you use this function.
Sourcepub unsafe fn pop_copy(&mut self, elems: &mut [MaybeUninit<T>]) -> usize
pub unsafe fn pop_copy(&mut self, elems: &mut [MaybeUninit<T>]) -> usize
Copies data from the ring buffer to the slice in byte-to-byte manner.
The elems
slice should contain un-initialized data before the method call.
After the call the copied part of data in elems
should be interpreted as initialized.
The remaining part is still un-initialized.
Returns the number of items been copied.
§Safety
The method copies raw data from the ring buffer.
You should manage copied elements after call, otherwise you may get a memory leak.
Sourcepub fn pop(&mut self) -> Option<T>
pub fn pop(&mut self) -> Option<T>
Removes latest element from the ring buffer and returns it.
Returns None
if the ring buffer is empty.
Examples found in repository?
6fn main() {
7 let collector = Collector::new();
8
9 let rb = RingBuffer::<i32>::new(2);
10 let (mut prod, mut cons) = rb.split(&collector.handle());
11
12 prod.push(0).unwrap();
13 prod.push(1).unwrap();
14 assert_eq!(prod.push(2), Err(2));
15
16 assert_eq!(cons.pop().unwrap(), 0);
17
18 prod.push(2).unwrap();
19
20 assert_eq!(cons.pop().unwrap(), 1);
21 assert_eq!(cons.pop().unwrap(), 2);
22 assert_eq!(cons.pop(), None);
23}
Sourcepub fn pop_each<F: FnMut(T) -> bool>(
&mut self,
f: F,
count: Option<usize>,
) -> usize
pub fn pop_each<F: FnMut(T) -> bool>( &mut self, f: F, count: Option<usize>, ) -> usize
Repeatedly calls the closure f
passing elements removed from the ring buffer to it.
The closure is called until it returns false
or the ring buffer is empty.
The method returns number of elements been removed from the buffer.
Sourcepub fn for_each<F: FnMut(&T)>(&self, f: F)
👎Deprecated since 0.2.7: please use iter
instead
pub fn for_each<F: FnMut(&T)>(&self, f: F)
iter
insteadIterate immutably over the elements contained by the ring buffer without removing them.
The iteration may not include elements pushed to the buffer by concurring producer after the method call.
Marked deprecated in favor of iter
.
Sourcepub fn for_each_mut<F: FnMut(&mut T)>(&mut self, f: F)
👎Deprecated since 0.2.7: please use iter_mut
instead
pub fn for_each_mut<F: FnMut(&mut T)>(&mut self, f: F)
iter_mut
insteadIterate mutably over the elements contained by the ring buffer without removing them.
The iteration may not include elements pushed to the buffer by concurring producer after the method call.
Marked deprecated in favor of iter_mut
.
Sourcepub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T> + '_
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T> + '_
Returns a front-to-back iterator that returns mutable references.
Sourcepub fn discard(&mut self, n: usize) -> usize
pub fn discard(&mut self, n: usize) -> usize
Removes at most n
and at least min(n, Consumer::len())
items from the buffer and safely drops them.
If there is no concurring producer activity then exactly min(n, Consumer::len())
items are removed.
Returns the number of deleted items.
let collector = Collector::new();
let rb = RingBuffer::<i32>::new(8);
let (mut prod, mut cons) = rb.split(&collector.handle());
assert_eq!(prod.push_iter(&mut (0..8)), 8);
assert_eq!(cons.discard(4), 4);
assert_eq!(cons.discard(8), 4);
assert_eq!(cons.discard(8), 0);
Sourcepub fn move_to(
&mut self,
other: &mut Producer<T>,
count: Option<usize>,
) -> usize
pub fn move_to( &mut self, other: &mut Producer<T>, count: Option<usize>, ) -> usize
Removes at most count
elements from the consumer and appends them to the producer.
If count
is None
then as much as possible elements will be moved.
The producer and consumer parts may be of different buffers as well as of the same one.
On success returns count of elements been moved.
Source§impl Consumer<u8>
impl Consumer<u8>
Sourcepub fn write_into(
&mut self,
writer: &mut dyn Write,
count: Option<usize>,
) -> Result<usize>
pub fn write_into( &mut self, writer: &mut dyn Write, count: Option<usize>, ) -> Result<usize>
Removes at most first count
bytes from the ring buffer and writes them into
a Write
instance.
If count
is None
then as much as possible bytes will be written.
Returns Ok(n)
if write
succeeded. n
is number of bytes been written.
n == 0
means that either write
returned zero or ring buffer is empty.
If write
is failed or returned an invalid number then error is returned.
Examples found in repository?
10fn main() {
11 let collector = Collector::new();
12
13 let buf = RingBuffer::<u8>::new(10);
14 let (mut prod, mut cons) = buf.split(&collector.handle());
15
16 let smsg = "The quick brown fox jumps over the lazy dog";
17
18 let pjh = thread::spawn(move || {
19 println!("-> sending message: '{}'", smsg);
20
21 let zero = [0];
22 let mut bytes = smsg.as_bytes().chain(&zero[..]);
23 loop {
24 if prod.is_full() {
25 println!("-> buffer is full, waiting");
26 thread::sleep(Duration::from_millis(1));
27 } else {
28 let n = prod.read_from(&mut bytes, None).unwrap();
29 if n == 0 {
30 break;
31 }
32 println!("-> {} bytes sent", n);
33 }
34 }
35
36 println!("-> message sent");
37 });
38
39 let cjh = thread::spawn(move || {
40 println!("<- receiving message");
41
42 let mut bytes = Vec::<u8>::new();
43 loop {
44 if cons.is_empty() {
45 if bytes.ends_with(&[0]) {
46 break;
47 } else {
48 println!("<- buffer is empty, waiting");
49 thread::sleep(Duration::from_millis(1));
50 }
51 } else {
52 let n = cons.write_into(&mut bytes, None).unwrap();
53 println!("<- {} bytes received", n);
54 }
55 }
56
57 assert_eq!(bytes.pop().unwrap(), 0);
58 let msg = String::from_utf8(bytes).unwrap();
59 println!("<- message received: '{}'", msg);
60
61 msg
62 });
63
64 pjh.join().unwrap();
65 let rmsg = cjh.join().unwrap();
66
67 assert_eq!(smsg, rmsg);
68}
Trait Implementations§
Source§impl<T: Send + Sized + 'static> Iterator for Consumer<T>
impl<T: Send + Sized + 'static> Iterator for Consumer<T>
Source§fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
fn next_chunk<const N: usize>(
&mut self,
) -> Result<[Self::Item; N], IntoIter<Self::Item, N>>where
Self: Sized,
iter_next_chunk
)N
values. Read more1.0.0 · Source§fn size_hint(&self) -> (usize, Option<usize>)
fn size_hint(&self) -> (usize, Option<usize>)
1.0.0 · Source§fn count(self) -> usizewhere
Self: Sized,
fn count(self) -> usizewhere
Self: Sized,
1.0.0 · Source§fn last(self) -> Option<Self::Item>where
Self: Sized,
fn last(self) -> Option<Self::Item>where
Self: Sized,
Source§fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
fn advance_by(&mut self, n: usize) -> Result<(), NonZero<usize>>
iter_advance_by
)n
elements. Read more1.0.0 · Source§fn nth(&mut self, n: usize) -> Option<Self::Item>
fn nth(&mut self, n: usize) -> Option<Self::Item>
n
th element of the iterator. Read more1.28.0 · Source§fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
fn step_by(self, step: usize) -> StepBy<Self>where
Self: Sized,
1.0.0 · Source§fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
fn chain<U>(self, other: U) -> Chain<Self, <U as IntoIterator>::IntoIter>
1.0.0 · Source§fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
fn zip<U>(self, other: U) -> Zip<Self, <U as IntoIterator>::IntoIter>where
Self: Sized,
U: IntoIterator,
Source§fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
fn intersperse(self, separator: Self::Item) -> Intersperse<Self>
iter_intersperse
)separator
between adjacent
items of the original iterator. Read moreSource§fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
fn intersperse_with<G>(self, separator: G) -> IntersperseWith<Self, G>
iter_intersperse
)separator
between adjacent items of the original iterator. Read more1.0.0 · Source§fn map<B, F>(self, f: F) -> Map<Self, F>
fn map<B, F>(self, f: F) -> Map<Self, F>
1.0.0 · Source§fn filter<P>(self, predicate: P) -> Filter<Self, P>
fn filter<P>(self, predicate: P) -> Filter<Self, P>
1.0.0 · Source§fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
fn filter_map<B, F>(self, f: F) -> FilterMap<Self, F>
1.0.0 · Source§fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
fn enumerate(self) -> Enumerate<Self>where
Self: Sized,
1.0.0 · Source§fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
fn skip_while<P>(self, predicate: P) -> SkipWhile<Self, P>
1.0.0 · Source§fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
fn take_while<P>(self, predicate: P) -> TakeWhile<Self, P>
1.57.0 · Source§fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
fn map_while<B, P>(self, predicate: P) -> MapWhile<Self, P>
1.0.0 · Source§fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
fn skip(self, n: usize) -> Skip<Self>where
Self: Sized,
n
elements. Read more1.0.0 · Source§fn take(self, n: usize) -> Take<Self>where
Self: Sized,
fn take(self, n: usize) -> Take<Self>where
Self: Sized,
n
elements, or fewer
if the underlying iterator ends sooner. Read more1.0.0 · Source§fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
fn flat_map<U, F>(self, f: F) -> FlatMap<Self, U, F>
1.29.0 · Source§fn flatten(self) -> Flatten<Self>
fn flatten(self) -> Flatten<Self>
Source§fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
fn map_windows<F, R, const N: usize>(self, f: F) -> MapWindows<Self, F, N>
iter_map_windows
)f
for each contiguous window of size N
over
self
and returns an iterator over the outputs of f
. Like slice::windows()
,
the windows during mapping overlap as well. Read more1.0.0 · Source§fn inspect<F>(self, f: F) -> Inspect<Self, F>
fn inspect<F>(self, f: F) -> Inspect<Self, F>
1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Iterator
. Read moreSource§fn try_collect<B>(
&mut self,
) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
fn try_collect<B>( &mut self, ) -> <<Self::Item as Try>::Residual as Residual<B>>::TryType
iterator_try_collect
)Source§fn collect_into<E>(self, collection: &mut E) -> &mut E
fn collect_into<E>(self, collection: &mut E) -> &mut E
iter_collect_into
)1.0.0 · Source§fn partition<B, F>(self, f: F) -> (B, B)
fn partition<B, F>(self, f: F) -> (B, B)
Source§fn is_partitioned<P>(self, predicate: P) -> bool
fn is_partitioned<P>(self, predicate: P) -> bool
iter_is_partitioned
)true
precede all those that return false
. Read more1.27.0 · Source§fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
fn try_fold<B, F, R>(&mut self, init: B, f: F) -> R
1.27.0 · Source§fn try_for_each<F, R>(&mut self, f: F) -> R
fn try_for_each<F, R>(&mut self, f: F) -> R
1.0.0 · Source§fn fold<B, F>(self, init: B, f: F) -> B
fn fold<B, F>(self, init: B, f: F) -> B
1.51.0 · Source§fn reduce<F>(self, f: F) -> Option<Self::Item>
fn reduce<F>(self, f: F) -> Option<Self::Item>
Source§fn try_reduce<R>(
&mut self,
f: impl FnMut(Self::Item, Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
fn try_reduce<R>( &mut self, f: impl FnMut(Self::Item, Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<<R as Try>::Output>>>::TryType
iterator_try_reduce
)1.0.0 · Source§fn all<F>(&mut self, f: F) -> bool
fn all<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn any<F>(&mut self, f: F) -> bool
fn any<F>(&mut self, f: F) -> bool
1.0.0 · Source§fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
fn find<P>(&mut self, predicate: P) -> Option<Self::Item>
1.30.0 · Source§fn find_map<B, F>(&mut self, f: F) -> Option<B>
fn find_map<B, F>(&mut self, f: F) -> Option<B>
Source§fn try_find<R>(
&mut self,
f: impl FnMut(&Self::Item) -> R,
) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
fn try_find<R>( &mut self, f: impl FnMut(&Self::Item) -> R, ) -> <<R as Try>::Residual as Residual<Option<Self::Item>>>::TryType
try_find
)1.0.0 · Source§fn position<P>(&mut self, predicate: P) -> Option<usize>
fn position<P>(&mut self, predicate: P) -> Option<usize>
1.0.0 · Source§fn max(self) -> Option<Self::Item>
fn max(self) -> Option<Self::Item>
1.0.0 · Source§fn min(self) -> Option<Self::Item>
fn min(self) -> Option<Self::Item>
1.6.0 · Source§fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn max_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn max_by<F>(self, compare: F) -> Option<Self::Item>
fn max_by<F>(self, compare: F) -> Option<Self::Item>
1.6.0 · Source§fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
fn min_by_key<B, F>(self, f: F) -> Option<Self::Item>
1.15.0 · Source§fn min_by<F>(self, compare: F) -> Option<Self::Item>
fn min_by<F>(self, compare: F) -> Option<Self::Item>
1.0.0 · Source§fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
fn unzip<A, B, FromA, FromB>(self) -> (FromA, FromB)
1.36.0 · Source§fn copied<'a, T>(self) -> Copied<Self>
fn copied<'a, T>(self) -> Copied<Self>
Source§fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
fn array_chunks<const N: usize>(self) -> ArrayChunks<Self, N>where
Self: Sized,
iter_array_chunks
)N
elements of the iterator at a time. Read more1.11.0 · Source§fn product<P>(self) -> P
fn product<P>(self) -> P
Source§fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
fn cmp_by<I, F>(self, other: I, cmp: F) -> Ordering
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read more1.5.0 · Source§fn partial_cmp<I>(self, other: I) -> Option<Ordering>
fn partial_cmp<I>(self, other: I) -> Option<Ordering>
PartialOrd
elements of
this Iterator
with those of another. The comparison works like short-circuit
evaluation, returning a result without comparing the remaining elements.
As soon as an order can be determined, the evaluation stops and a result is returned. Read moreSource§fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
fn partial_cmp_by<I, F>(self, other: I, partial_cmp: F) -> Option<Ordering>where
Self: Sized,
I: IntoIterator,
F: FnMut(Self::Item, <I as IntoIterator>::Item) -> Option<Ordering>,
iter_order_by
)Iterator
with those
of another with respect to the specified comparison function. Read moreSource§fn eq_by<I, F>(self, other: I, eq: F) -> bool
fn eq_by<I, F>(self, other: I, eq: F) -> bool
iter_order_by
)1.5.0 · Source§fn lt<I>(self, other: I) -> bool
fn lt<I>(self, other: I) -> bool
Iterator
are lexicographically
less than those of another. Read more1.5.0 · Source§fn le<I>(self, other: I) -> bool
fn le<I>(self, other: I) -> bool
Iterator
are lexicographically
less or equal to those of another. Read more1.5.0 · Source§fn gt<I>(self, other: I) -> bool
fn gt<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than those of another. Read more1.5.0 · Source§fn ge<I>(self, other: I) -> bool
fn ge<I>(self, other: I) -> bool
Iterator
are lexicographically
greater than or equal to those of another. Read more1.82.0 · Source§fn is_sorted(self) -> bool
fn is_sorted(self) -> bool
1.82.0 · Source§fn is_sorted_by<F>(self, compare: F) -> bool
fn is_sorted_by<F>(self, compare: F) -> bool
1.82.0 · Source§fn is_sorted_by_key<F, K>(self, f: F) -> bool
fn is_sorted_by_key<F, K>(self, f: F) -> bool
Source§impl Read for Consumer<u8>
impl Read for Consumer<u8>
Source§fn read(&mut self, buffer: &mut [u8]) -> Result<usize>
fn read(&mut self, buffer: &mut [u8]) -> Result<usize>
1.36.0 · Source§fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
fn read_vectored(&mut self, bufs: &mut [IoSliceMut<'_>]) -> Result<usize, Error>
read
, except that it reads into a slice of buffers. Read moreSource§fn is_read_vectored(&self) -> bool
fn is_read_vectored(&self) -> bool
can_vector
)1.0.0 · Source§fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
fn read_to_end(&mut self, buf: &mut Vec<u8>) -> Result<usize, Error>
buf
. Read more1.0.0 · Source§fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
fn read_to_string(&mut self, buf: &mut String) -> Result<usize, Error>
buf
. Read more1.6.0 · Source§fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
fn read_exact(&mut self, buf: &mut [u8]) -> Result<(), Error>
buf
. Read moreSource§fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf(&mut self, buf: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)Source§fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
fn read_buf_exact(&mut self, cursor: BorrowedCursor<'_>) -> Result<(), Error>
read_buf
)cursor
. Read more1.0.0 · Source§fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
fn by_ref(&mut self) -> &mut Selfwhere
Self: Sized,
Read
. Read more