Trait bytes::buf::buf_mut::BufMut[][src]

pub trait BufMut {
Show 33 methods fn remaining_mut(&self) -> usize;
unsafe fn advance_mut(&mut self, cnt: usize);
fn bytes_mut(&mut self) -> &mut [MaybeUninit<u8>]
Notable traits for &'_ mut [u8]
impl<'_> Write for &'_ mut [u8]impl<'_> Read for &'_ [u8]
; fn has_remaining_mut(&self) -> bool { ... }
fn bytes_vectored_mut<'a>(&'a mut self, dst: &mut [IoSliceMut<'a>]) -> usize { ... }
fn put<T: Buf>(&mut self, src: T)
    where
        Self: Sized
, { ... }
fn put_slice(&mut self, src: &[u8]) { ... }
fn put_u8(&mut self, n: u8) { ... }
fn put_i8(&mut self, n: i8) { ... }
fn put_u16(&mut self, n: u16) { ... }
fn put_u16_le(&mut self, n: u16) { ... }
fn put_i16(&mut self, n: i16) { ... }
fn put_i16_le(&mut self, n: i16) { ... }
fn put_u32(&mut self, n: u32) { ... }
fn put_u32_le(&mut self, n: u32) { ... }
fn put_i32(&mut self, n: i32) { ... }
fn put_i32_le(&mut self, n: i32) { ... }
fn put_u64(&mut self, n: u64) { ... }
fn put_u64_le(&mut self, n: u64) { ... }
fn put_i64(&mut self, n: i64) { ... }
fn put_i64_le(&mut self, n: i64) { ... }
fn put_u128(&mut self, n: u128) { ... }
fn put_u128_le(&mut self, n: u128) { ... }
fn put_i128(&mut self, n: i128) { ... }
fn put_i128_le(&mut self, n: i128) { ... }
fn put_uint(&mut self, n: u64, nbytes: usize) { ... }
fn put_uint_le(&mut self, n: u64, nbytes: usize) { ... }
fn put_int(&mut self, n: i64, nbytes: usize) { ... }
fn put_int_le(&mut self, n: i64, nbytes: usize) { ... }
fn put_f32(&mut self, n: f32) { ... }
fn put_f32_le(&mut self, n: f32) { ... }
fn put_f64(&mut self, n: f64) { ... }
fn put_f64_le(&mut self, n: f64) { ... }
}
Expand description

A trait for values that provide sequential write access to bytes.

Write bytes to a buffer

A buffer stores bytes in memory such that write operations are infallible. The underlying storage may or may not be in contiguous memory. A BufMut value is a cursor into the buffer. Writing to BufMut advances the cursor position.

The simplest BufMut is a Vec<u8>.

use bytes::BufMut;

let mut buf = vec![];

buf.put(&b"hello world"[..]);

assert_eq!(buf, b"hello world");

Required methods

Returns the number of bytes that can be written from the current position until the end of the buffer is reached.

This value is greater than or equal to the length of the slice returned by bytes_mut.

Examples
use bytes::BufMut;

let mut dst = [0; 10];
let mut buf = &mut dst[..];

let original_remaining = buf.remaining_mut();
buf.put(&b"hello"[..]);

assert_eq!(original_remaining - 5, buf.remaining_mut());
Implementer notes

Implementations of remaining_mut should ensure that the return value does not change unless a call is made to advance_mut or any other function that is documented to change the BufMut’s current position.

Advance the internal cursor of the BufMut

The next call to bytes_mut will return a slice starting cnt bytes further into the underlying buffer.

This function is unsafe because there is no guarantee that the bytes being advanced past have been initialized.

Examples
use bytes::BufMut;

let mut buf = Vec::with_capacity(16);

unsafe {
    // MaybeUninit::as_mut_ptr
    buf.bytes_mut()[0].as_mut_ptr().write(b'h');
    buf.bytes_mut()[1].as_mut_ptr().write(b'e');

    buf.advance_mut(2);

    buf.bytes_mut()[0].as_mut_ptr().write(b'l');
    buf.bytes_mut()[1].as_mut_ptr().write(b'l');
    buf.bytes_mut()[2].as_mut_ptr().write(b'o');

    buf.advance_mut(3);
}

assert_eq!(5, buf.len());
assert_eq!(buf, b"hello");
Panics

This function may panic if cnt > self.remaining_mut().

Implementer notes

It is recommended for implementations of advance_mut to panic if cnt > self.remaining_mut(). If the implementation does not panic, the call must behave as if cnt == self.remaining_mut().

A call with cnt == 0 should never panic and be a no-op.

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).

This is a lower level function. Most operations are done with other functions.

The returned byte slice may represent uninitialized memory.

Examples
use bytes::BufMut;

let mut buf = Vec::with_capacity(16);

unsafe {
    // MaybeUninit::as_mut_ptr
    buf.bytes_mut()[0].as_mut_ptr().write(b'h');
    buf.bytes_mut()[1].as_mut_ptr().write(b'e');

    buf.advance_mut(2);

    buf.bytes_mut()[0].as_mut_ptr().write(b'l');
    buf.bytes_mut()[1].as_mut_ptr().write(b'l');
    buf.bytes_mut()[2].as_mut_ptr().write(b'o');

    buf.advance_mut(3);
}

assert_eq!(5, buf.len());
assert_eq!(buf, b"hello");
Implementer notes

This function should never panic. bytes_mut should return an empty slice if and only if remaining_mut returns 0. In other words, bytes_mut returning an empty slice implies that remaining_mut will return 0 and remaining_mut returning 0 implies that bytes_mut will return an empty slice.

Provided methods

Returns true if there is space in self for more bytes.

This is equivalent to self.remaining_mut() != 0.

Examples
use bytes::BufMut;

let mut dst = [0; 5];
let mut buf = &mut dst[..];

assert!(buf.has_remaining_mut());

buf.put(&b"hello"[..]);

assert!(!buf.has_remaining_mut());

Fills dst with potentially multiple mutable slices starting at self’s current position.

If the BufMut is backed by disjoint slices of bytes, bytes_vectored_mut enables fetching more than one slice at once. dst is a slice of mutable IoSliceMut references, enabling the slice to be directly used with readv without any further conversion. The sum of the lengths of all the buffers in dst will be less than or equal to Buf::remaining_mut().

The entries in dst will be overwritten, but the data contained by the slices will not be modified. If bytes_vectored_mut does not fill every entry in dst, then dst is guaranteed to contain all remaining slices in `self.

This is a lower level function. Most operations are done with other functions.

Implementer notes

This function should never panic. Once the end of the buffer is reached, i.e., BufMut::remaining_mut returns 0, calls to bytes_vectored_mut must return 0 without mutating dst.

Implementations should also take care to properly handle being called with dst being a zero length slice.

Transfer bytes into self from src and advance the cursor by the number of bytes written.

Examples
use bytes::BufMut;

let mut buf = vec![];

buf.put_u8(b'h');
buf.put(&b"ello"[..]);
buf.put(&b" world"[..]);

assert_eq!(buf, b"hello world");
Panics

Panics if self does not have enough capacity to contain src.

Transfer bytes into self from src and advance the cursor by the number of bytes written.

self must have enough remaining capacity to contain all of src.

use bytes::BufMut;

let mut dst = [0; 6];

{
    let mut buf = &mut dst[..];
    buf.put_slice(b"hello");

    assert_eq!(1, buf.remaining_mut());
}

assert_eq!(b"hello\0", &dst);

Writes an unsigned 8 bit integer to self.

The current position is advanced by 1.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u8(0x01);
assert_eq!(buf, b"\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 8 bit integer to self.

The current position is advanced by 1.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i8(0x01);
assert_eq!(buf, b"\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 16 bit integer to self in big-endian byte order.

The current position is advanced by 2.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u16(0x0809);
assert_eq!(buf, b"\x08\x09");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 16 bit integer to self in little-endian byte order.

The current position is advanced by 2.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u16_le(0x0809);
assert_eq!(buf, b"\x09\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 16 bit integer to self in big-endian byte order.

The current position is advanced by 2.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i16(0x0809);
assert_eq!(buf, b"\x08\x09");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 16 bit integer to self in little-endian byte order.

The current position is advanced by 2.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i16_le(0x0809);
assert_eq!(buf, b"\x09\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 32 bit integer to self in big-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u32(0x0809A0A1);
assert_eq!(buf, b"\x08\x09\xA0\xA1");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 32 bit integer to self in little-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u32_le(0x0809A0A1);
assert_eq!(buf, b"\xA1\xA0\x09\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 32 bit integer to self in big-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i32(0x0809A0A1);
assert_eq!(buf, b"\x08\x09\xA0\xA1");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 32 bit integer to self in little-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i32_le(0x0809A0A1);
assert_eq!(buf, b"\xA1\xA0\x09\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 64 bit integer to self in the big-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u64(0x0102030405060708);
assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 64 bit integer to self in little-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u64_le(0x0102030405060708);
assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 64 bit integer to self in the big-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i64(0x0102030405060708);
assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 64 bit integer to self in little-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i64_le(0x0102030405060708);
assert_eq!(buf, b"\x08\x07\x06\x05\x04\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 128 bit integer to self in the big-endian byte order.

The current position is advanced by 16.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u128(0x01020304050607080910111213141516);
assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned 128 bit integer to self in little-endian byte order.

The current position is advanced by 16.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_u128_le(0x01020304050607080910111213141516);
assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 128 bit integer to self in the big-endian byte order.

The current position is advanced by 16.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i128(0x01020304050607080910111213141516);
assert_eq!(buf, b"\x01\x02\x03\x04\x05\x06\x07\x08\x09\x10\x11\x12\x13\x14\x15\x16");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed 128 bit integer to self in little-endian byte order.

The current position is advanced by 16.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_i128_le(0x01020304050607080910111213141516);
assert_eq!(buf, b"\x16\x15\x14\x13\x12\x11\x10\x09\x08\x07\x06\x05\x04\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned n-byte integer to self in big-endian byte order.

The current position is advanced by nbytes.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_uint(0x010203, 3);
assert_eq!(buf, b"\x01\x02\x03");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an unsigned n-byte integer to self in the little-endian byte order.

The current position is advanced by nbytes.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_uint_le(0x010203, 3);
assert_eq!(buf, b"\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed n-byte integer to self in big-endian byte order.

The current position is advanced by nbytes.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_int(0x010203, 3);
assert_eq!(buf, b"\x01\x02\x03");
Panics

This function panics if there is not enough remaining capacity in self.

Writes a signed n-byte integer to self in little-endian byte order.

The current position is advanced by nbytes.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_int_le(0x010203, 3);
assert_eq!(buf, b"\x03\x02\x01");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an IEEE754 single-precision (4 bytes) floating point number to self in big-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_f32(1.2f32);
assert_eq!(buf, b"\x3F\x99\x99\x9A");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an IEEE754 single-precision (4 bytes) floating point number to self in little-endian byte order.

The current position is advanced by 4.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_f32_le(1.2f32);
assert_eq!(buf, b"\x9A\x99\x99\x3F");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an IEEE754 double-precision (8 bytes) floating point number to self in big-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_f64(1.2f64);
assert_eq!(buf, b"\x3F\xF3\x33\x33\x33\x33\x33\x33");
Panics

This function panics if there is not enough remaining capacity in self.

Writes an IEEE754 double-precision (8 bytes) floating point number to self in little-endian byte order.

The current position is advanced by 8.

Examples
use bytes::BufMut;

let mut buf = vec![];
buf.put_f64_le(1.2f64);
assert_eq!(buf, b"\x33\x33\x33\x33\x33\x33\xF3\x3F");
Panics

This function panics if there is not enough remaining capacity in self.

Implementations on Foreign Types

Implementors