Struct bufsize::SizeCounter
source · pub struct SizeCounter { /* private fields */ }
Expand description
Implementation of BufMut
to count the size of a resulting buffer.
This effectively requires the data to be serialized twice, but in many use cases inlining allows most of the effort of generating actual data to be elided.
Example
use bufsize::SizeCounter;
use bytes::BufMut;
pub struct DataStructure;
impl DataStructure {
pub fn serialize<B: BufMut>(&self, buf: &mut B) {
let name = "DataStructure";
buf.put_u8(name.len() as u8);
buf.put_slice(name.as_bytes());
buf.put_u32_le(9999);
buf.put_f32_le(1.0);
}
}
fn main() {
let mut sizecount = SizeCounter::new();
DataStructure.serialize(&mut sizecount);
let mut buffer = Vec::with_capacity(sizecount.size());
DataStructure.serialize(&mut buffer);
assert_eq!(sizecount.size(), buffer.len());
}
Implementations§
Trait Implementations§
source§impl BufMut for SizeCounter
impl BufMut for SizeCounter
source§fn remaining_mut(&self) -> usize
fn remaining_mut(&self) -> usize
Returns the number of bytes that can be written from the current
position until the end of the buffer is reached. Read more
source§unsafe fn advance_mut(&mut self, cnt: usize)
unsafe fn advance_mut(&mut self, cnt: usize)
Advance the internal cursor of the BufMut Read more
source§fn chunk_mut(&mut self) -> &mut UninitSlice
fn chunk_mut(&mut self) -> &mut UninitSlice
Returns a mutable slice starting at the current BufMut position and of
length between 0 and
BufMut::remaining_mut()
. Note that this can be shorter than the
whole remainder of the buffer (this allows non-continuous implementation). Read moresource§fn has_remaining_mut(&self) -> bool
fn has_remaining_mut(&self) -> bool
Returns true if there is space in
self
for more bytes. Read moresource§fn put_u16(&mut self, n: u16)
fn put_u16(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in big-endian byte order. Read moresource§fn put_u16_le(&mut self, n: u16)
fn put_u16_le(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in little-endian byte order. Read moresource§fn put_i16(&mut self, n: i16)
fn put_i16(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in big-endian byte order. Read moresource§fn put_i16_le(&mut self, n: i16)
fn put_i16_le(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in little-endian byte order. Read moresource§fn put_u32(&mut self, n: u32)
fn put_u32(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in big-endian byte order. Read moresource§fn put_u32_le(&mut self, n: u32)
fn put_u32_le(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in little-endian byte order. Read moresource§fn put_i32(&mut self, n: i32)
fn put_i32(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in big-endian byte order. Read moresource§fn put_i32_le(&mut self, n: i32)
fn put_i32_le(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in little-endian byte order. Read moresource§fn put_u64(&mut self, n: u64)
fn put_u64(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in the big-endian byte order. Read moresource§fn put_u64_le(&mut self, n: u64)
fn put_u64_le(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in little-endian byte order. Read moresource§fn put_i64(&mut self, n: i64)
fn put_i64(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in the big-endian byte order. Read moresource§fn put_i64_le(&mut self, n: i64)
fn put_i64_le(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in little-endian byte order. Read moresource§fn put_u128(&mut self, n: u128)
fn put_u128(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in the big-endian byte order. Read moresource§fn put_u128_le(&mut self, n: u128)
fn put_u128_le(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in little-endian byte order. Read moresource§fn put_i128(&mut self, n: i128)
fn put_i128(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in the big-endian byte order. Read moresource§fn put_i128_le(&mut self, n: i128)
fn put_i128_le(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in little-endian byte order. Read moresource§fn put_uint(&mut self, n: u64, nbytes: usize)
fn put_uint(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in big-endian byte order. Read moresource§fn put_uint_le(&mut self, n: u64, nbytes: usize)
fn put_uint_le(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in the little-endian byte order. Read moresource§fn put_int_le(&mut self, n: i64, nbytes: usize)
fn put_int_le(&mut self, n: i64, nbytes: usize)
source§fn put_f32(&mut self, n: f32)
fn put_f32(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in big-endian byte order. Read moresource§fn put_f32_le(&mut self, n: f32)
fn put_f32_le(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in little-endian byte order. Read moresource§fn put_f64(&mut self, n: f64)
fn put_f64(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in big-endian byte order. Read moresource§fn put_f64_le(&mut self, n: f64)
fn put_f64_le(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in little-endian byte order. Read moresource§fn put_u16_ne(&mut self, n: u16)
fn put_u16_ne(&mut self, n: u16)
Writes an unsigned 16 bit integer to
self
in native-endian byte order. Read moresource§fn put_i16_ne(&mut self, n: i16)
fn put_i16_ne(&mut self, n: i16)
Writes a signed 16 bit integer to
self
in native-endian byte order. Read moresource§fn put_u32_ne(&mut self, n: u32)
fn put_u32_ne(&mut self, n: u32)
Writes an unsigned 32 bit integer to
self
in native-endian byte order. Read moresource§fn put_i32_ne(&mut self, n: i32)
fn put_i32_ne(&mut self, n: i32)
Writes a signed 32 bit integer to
self
in native-endian byte order. Read moresource§fn put_u64_ne(&mut self, n: u64)
fn put_u64_ne(&mut self, n: u64)
Writes an unsigned 64 bit integer to
self
in native-endian byte order. Read moresource§fn put_i64_ne(&mut self, n: i64)
fn put_i64_ne(&mut self, n: i64)
Writes a signed 64 bit integer to
self
in native-endian byte order. Read moresource§fn put_u128_ne(&mut self, n: u128)
fn put_u128_ne(&mut self, n: u128)
Writes an unsigned 128 bit integer to
self
in native-endian byte order. Read moresource§fn put_i128_ne(&mut self, n: i128)
fn put_i128_ne(&mut self, n: i128)
Writes a signed 128 bit integer to
self
in native-endian byte order. Read moresource§fn put_uint_ne(&mut self, n: u64, nbytes: usize)
fn put_uint_ne(&mut self, n: u64, nbytes: usize)
Writes an unsigned n-byte integer to
self
in the native-endian byte order. Read moresource§fn put_int_ne(&mut self, n: i64, nbytes: usize)
fn put_int_ne(&mut self, n: i64, nbytes: usize)
source§fn put_f32_ne(&mut self, n: f32)
fn put_f32_ne(&mut self, n: f32)
Writes an IEEE754 single-precision (4 bytes) floating point number to
self
in native-endian byte order. Read moresource§fn put_f64_ne(&mut self, n: f64)
fn put_f64_ne(&mut self, n: f64)
Writes an IEEE754 double-precision (8 bytes) floating point number to
self
in native-endian byte order. Read more