#[non_exhaustive]pub struct LengthHint(pub usize, pub Option<usize>);
Expand description
A hint to help consumers of Writeable
pre-allocate bytes before they call
write_to
.
This behaves like Iterator::size_hint
: it is a tuple where the first element is the
lower bound, and the second element is the upper bound. If the upper bound is None
either there is no known upper bound, or the upper bound is larger than usize
.
LengthHint
implements std::ops::{Add, Mul}
and similar traits for easy composition.
During computation, the lower bound will saturate at usize::MAX
, while the upper
bound will become None
if usize::MAX
is exceeded.
Tuple Fields (Non-exhaustive)§
This struct is marked as non-exhaustive
Struct { .. }
syntax; cannot be matched against without a wildcard ..
; and struct update syntax will not work.0: usize
§1: Option<usize>
Implementations§
Source§impl LengthHint
impl LengthHint
pub fn undefined() -> Self
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Returns a recommendation for the number of bytes to pre-allocate. If an upper bound exists, this is used, otherwise the lower bound (which might be 0).
§Examples
use writeable::Writeable;
fn pre_allocate_string(w: &impl Writeable) -> String {
String::with_capacity(w.writeable_length_hint().capacity())
}
Trait Implementations§
Source§impl Add<usize> for LengthHint
impl Add<usize> for LengthHint
Source§impl Add for LengthHint
impl Add for LengthHint
Source§type Output = LengthHint
type Output = LengthHint
+
operator.Source§fn add(self, other: LengthHint) -> Self
fn add(self, other: LengthHint) -> Self
+
operation. Read moreSource§impl AddAssign<usize> for LengthHint
impl AddAssign<usize> for LengthHint
Source§fn add_assign(&mut self, other: usize)
fn add_assign(&mut self, other: usize)
+=
operation. Read moreSource§impl AddAssign for LengthHint
impl AddAssign for LengthHint
Source§fn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
+=
operation. Read moreSource§impl BitOr for LengthHint
impl BitOr for LengthHint
Source§fn bitor(self, other: LengthHint) -> Self
fn bitor(self, other: LengthHint) -> Self
Returns a new hint that is correct wherever self
is correct, and wherever
other
is correct.
Example:
struct NonDeterministicWriteable(String, String);
impl Writeable for NonDeterministicWriteable {
fn write_to<W: fmt::Write + ?Sized>(
&self,
sink: &mut W,
) -> fmt::Result {
sink.write_str(if coin_flip() { &self.0 } else { &self.1 })
}
fn writeable_length_hint(&self) -> LengthHint {
LengthHint::exact(self.0.len()) | LengthHint::exact(self.1.len())
}
}
writeable::impl_display_with_writeable!(NonDeterministicWriteable);
Source§type Output = LengthHint
type Output = LengthHint
|
operator.Source§impl BitOrAssign for LengthHint
impl BitOrAssign for LengthHint
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
|=
operation. Read moreSource§impl Clone for LengthHint
impl Clone for LengthHint
Source§fn clone(&self) -> LengthHint
fn clone(&self) -> LengthHint
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for LengthHint
impl Debug for LengthHint
Source§impl Mul<usize> for LengthHint
impl Mul<usize> for LengthHint
Source§impl MulAssign<usize> for LengthHint
impl MulAssign<usize> for LengthHint
Source§fn mul_assign(&mut self, other: usize)
fn mul_assign(&mut self, other: usize)
*=
operation. Read moreSource§impl PartialEq for LengthHint
impl PartialEq for LengthHint
Source§impl Sum<usize> for LengthHint
impl Sum<usize> for LengthHint
Source§impl Sum for LengthHint
impl Sum for LengthHint
Source§fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = LengthHint>,
fn sum<I>(iter: I) -> Selfwhere
I: Iterator<Item = LengthHint>,
Self
from the elements by “summing up”
the items.