pub struct ZeroSlice<T: AsULE>(/* private fields */);Expand description
A zero-copy “slice”, i.e. the zero-copy version of [T]. This behaves
similarly to ZeroVec<T>, however ZeroVec<T> is allowed to contain
owned data and as such is ideal for deserialization since most human readable
serialization formats cannot unconditionally deserialize zero-copy.
This type can be used inside VarZeroVec<T> and ZeroMap:
This essentially allows for the construction of zero-copy types isomorphic to Vec<Vec<T>> by instead
using VarZeroVec<ZeroSlice<T>>. See the VarZeroVec docs for an example.
§Examples
Const-construct a ZeroSlice of u16:
use zerovec::ule::AsULE;
use zerovec::ZeroSlice;
const DATA: &ZeroSlice<u16> =
    ZeroSlice::<u16>::from_ule_slice(&<u16 as AsULE>::ULE::from_array([
        211, 281, 421, 32973,
    ]));
assert_eq!(DATA.get(1), Some(281));Implementations§
source§impl<T> ZeroSlice<T>where
    T: AsULE,
 
impl<T> ZeroSlice<T>where
    T: AsULE,
sourcepub const fn as_zerovec(&self) -> ZeroVec<'_, T>
 
pub const fn as_zerovec(&self) -> ZeroVec<'_, T>
sourcepub fn parse_byte_slice(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub fn parse_byte_slice(bytes: &[u8]) -> Result<&Self, ZeroVecError>
Attempt to construct a &ZeroSlice<T> from a byte slice, returning an error
if it’s not a valid byte sequence
sourcepub const unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self
 
pub const unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self
Uses a &[u8] buffer as a ZeroVec<T> without any verification.
§Safety
bytes need to be an output from ZeroSlice::as_bytes().
sourcepub const fn from_ule_slice(slice: &[T::ULE]) -> &Self
 
pub const fn from_ule_slice(slice: &[T::ULE]) -> &Self
Construct a &ZeroSlice<T> from a slice of ULEs.
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
See ZeroSlice for an example.
sourcepub fn from_boxed_slice(slice: Box<[T::ULE]>) -> Box<Self>
 
pub fn from_boxed_slice(slice: Box<[T::ULE]>) -> Box<Self>
Construct a Box<ZeroSlice<T>> from a boxed slice of ULEs
sourcepub fn as_bytes(&self) -> &[u8] ⓘ
 
pub fn as_bytes(&self) -> &[u8] ⓘ
Returns this slice as its underlying &[u8] byte buffer representation.
Useful for serialization.
§Example
use zerovec::ZeroVec;
// The little-endian bytes correspond to the numbers on the following line.
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let nums: &[u16] = &[211, 281, 421, 32973];
let zerovec = ZeroVec::alloc_from_slice(nums);
assert_eq!(bytes, zerovec.as_bytes());sourcepub const fn as_ule_slice(&self) -> &[T::ULE]
 
pub const fn as_ule_slice(&self) -> &[T::ULE]
Dereferences this slice as &[T::ULE].
sourcepub const fn len(&self) -> usize
 
pub const fn len(&self) -> usize
Returns the number of elements in this slice.
§Example
use zerovec::ule::AsULE;
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(4, zerovec.len());
assert_eq!(
    bytes.len(),
    zerovec.len() * std::mem::size_of::<<u16 as AsULE>::ULE>()
);sourcepub const fn is_empty(&self) -> bool
 
pub const fn is_empty(&self) -> bool
Returns whether this slice is empty.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert!(!zerovec.is_empty());
let emptyvec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(&[]).expect("infallible");
assert!(emptyvec.is_empty());source§impl<T> ZeroSlice<T>where
    T: AsULE,
 
impl<T> ZeroSlice<T>where
    T: AsULE,
sourcepub fn get(&self, index: usize) -> Option<T>
 
pub fn get(&self, index: usize) -> Option<T>
Gets the element at the specified index. Returns None if out of range.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(zerovec.get(2), Some(421));
assert_eq!(zerovec.get(4), None);sourcepub fn get_as_array<const N: usize>(&self) -> Option<[T; N]>
 
pub fn get_as_array<const N: usize>(&self) -> Option<[T; N]>
Gets the entire slice as an array of length N. Returns None if the slice
does not have exactly N elements.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
let array: [u16; 4] =
    zerovec.get_as_array().expect("should be 4 items in array");
assert_eq!(array[2], 421);sourcepub fn get_subslice(&self, range: Range<usize>) -> Option<&ZeroSlice<T>>
 
pub fn get_subslice(&self, range: Range<usize>) -> Option<&ZeroSlice<T>>
Gets a subslice of elements within a certain range. Returns None if the range
is out of bounds of this ZeroSlice.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(
    zerovec.get_subslice(1..3),
    Some(&*ZeroVec::from_slice_or_alloc(&[0x0119, 0x01A5]))
);
assert_eq!(zerovec.get_subslice(3..5), None);sourcepub fn get_ule_ref(&self, index: usize) -> Option<&T::ULE>
 
pub fn get_ule_ref(&self, index: usize) -> Option<&T::ULE>
Get a borrowed reference to the underlying ULE type at a specified index.
Prefer Self::get() over this method where possible since working
directly with ULE types is less ergonomic
sourcepub const fn cast<P>(&self) -> &ZeroSlice<P>
 
pub const fn cast<P>(&self) -> &ZeroSlice<P>
Casts a ZeroSlice<T> to a compatible ZeroSlice<P>.
T and P are compatible if they have the same ULE representation.
If the ULEs of T and P are different, use Self::try_as_converted().
§Examples
use zerovec::ZeroSlice;
const BYTES: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
const ZS_U16: &ZeroSlice<u16> = {
    match ZeroSlice::<u16>::try_from_bytes(BYTES) {
        Ok(s) => s,
        Err(_) => unreachable!(),
    }
};
let zs_i16: &ZeroSlice<i16> = ZS_U16.cast();
assert_eq!(ZS_U16.get(3), Some(32973));
assert_eq!(zs_i16.get(3), Some(-32563));sourcepub fn try_as_converted<P: AsULE>(&self) -> Result<&ZeroSlice<P>, ZeroVecError>
 
pub fn try_as_converted<P: AsULE>(&self) -> Result<&ZeroSlice<P>, ZeroVecError>
Converts a &ZeroSlice<T> into a &ZeroSlice<P>.
The resulting slice will have the same length as the original slice
if and only if T::ULE and P::ULE are the same size.
If T and P have the exact same ULE, use Self::cast().
§Examples
use zerovec::ZeroSlice;
const BYTES: &[u8] = &[0x7F, 0xF3, 0x01, 0x00, 0x49, 0xF6, 0x01, 0x00];
const ZS_U32: &ZeroSlice<u32> = {
    match ZeroSlice::<u32>::try_from_bytes(BYTES) {
        Ok(s) => s,
        Err(_) => unreachable!(),
    }
};
let zs_u8_4: &ZeroSlice<[u8; 4]> =
    ZS_U32.try_as_converted().expect("valid code points");
assert_eq!(ZS_U32.get(0), Some(127871));
assert_eq!(zs_u8_4.get(0), Some([0x7F, 0xF3, 0x01, 0x00]));sourcepub fn first(&self) -> Option<T>
 
pub fn first(&self) -> Option<T>
Gets the first element. Returns None if empty.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(zerovec.first(), Some(211));sourcepub fn last(&self) -> Option<T>
 
pub fn last(&self) -> Option<T>
Gets the last element. Returns None if empty.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(zerovec.last(), Some(32973));sourcepub fn iter(
    &self,
) -> impl DoubleEndedIterator<Item = T> + ExactSizeIterator<Item = T> + '_
 
pub fn iter( &self, ) -> impl DoubleEndedIterator<Item = T> + ExactSizeIterator<Item = T> + '_
Gets an iterator over the elements.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
let mut it = zerovec.iter();
assert_eq!(it.next(), Some(211));
assert_eq!(it.next(), Some(281));
assert_eq!(it.next(), Some(421));
assert_eq!(it.next(), Some(32973));
assert_eq!(it.next(), None);sourcepub fn split_first(&self) -> Option<(T, &ZeroSlice<T>)>
 
pub fn split_first(&self) -> Option<(T, &ZeroSlice<T>)>
Returns a tuple with the first element and a subslice of the remaining elements.
§Example
use zerovec::ule::AsULE;
use zerovec::ZeroSlice;
const DATA: &ZeroSlice<u16> =
    ZeroSlice::<u16>::from_ule_slice(&<u16 as AsULE>::ULE::from_array([
        211, 281, 421, 32973,
    ]));
const EXPECTED_VALUE: (u16, &ZeroSlice<u16>) = (
    211,
    ZeroSlice::<u16>::from_ule_slice(&<u16 as AsULE>::ULE::from_array([
        281, 421, 32973,
    ])),
);
assert_eq!(EXPECTED_VALUE, DATA.split_first().unwrap());source§impl<T> ZeroSlice<T>
 
impl<T> ZeroSlice<T>
sourcepub fn binary_search(&self, x: &T) -> Result<usize, usize>
 
pub fn binary_search(&self, x: &T) -> Result<usize, usize>
Binary searches a sorted ZeroVec<T> for the given element. For more information, see
the primitive function binary_search.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(zerovec.binary_search(&281), Ok(1));
assert_eq!(zerovec.binary_search(&282), Err(2));source§impl<T> ZeroSlice<T>where
    T: AsULE,
 
impl<T> ZeroSlice<T>where
    T: AsULE,
sourcepub fn binary_search_by(
    &self,
    predicate: impl FnMut(T) -> Ordering,
) -> Result<usize, usize>
 
pub fn binary_search_by( &self, predicate: impl FnMut(T) -> Ordering, ) -> Result<usize, usize>
Binary searches a sorted ZeroVec<T> based on a given predicate. For more information, see
the primitive function binary_search_by.
§Example
use zerovec::ZeroVec;
let bytes: &[u8] = &[0xD3, 0x00, 0x19, 0x01, 0xA5, 0x01, 0xCD, 0x80];
let zerovec: ZeroVec<u16> =
    ZeroVec::parse_byte_slice(bytes).expect("infallible");
assert_eq!(zerovec.binary_search_by(|x| x.cmp(&281)), Ok(1));
assert_eq!(zerovec.binary_search_by(|x| x.cmp(&282)), Err(2));source§impl ZeroSlice<u8>
 
impl ZeroSlice<u8>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
source§impl ZeroSlice<u16>
 
impl ZeroSlice<u16>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
source§impl ZeroSlice<u32>
 
impl ZeroSlice<u32>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
source§impl ZeroSlice<u64>
 
impl ZeroSlice<u64>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
source§impl ZeroSlice<u128>
 
impl ZeroSlice<u128>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
source§impl ZeroSlice<bool>
 
impl ZeroSlice<bool>
sourcepub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
pub const fn try_from_bytes(bytes: &[u8]) -> Result<&Self, ZeroVecError>
This function can be used for constructing ZeroVecs in a const context, avoiding parsing checks.
This cannot be generic over T because of current limitations in const, but if
this method is needed in a non-const context, check out ZeroSlice::parse_byte_slice()
instead.
See ZeroSlice::cast() for an example.
Trait Implementations§
source§impl<T> EncodeAsVarULE<ZeroSlice<T>> for &[T]where
    T: AsULE + 'static,
 
impl<T> EncodeAsVarULE<ZeroSlice<T>> for &[T]where
    T: AsULE + 'static,
source§fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
 
fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
cb with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T. Read moresource§fn encode_var_ule_len(&self) -> usize
 
fn encode_var_ule_len(&self) -> usize
VarULE typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
 
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE type to the dst buffer. dst should
be the size of Self::encode_var_ule_len()source§impl<T> EncodeAsVarULE<ZeroSlice<T>> for Vec<T>where
    T: AsULE + 'static,
 
impl<T> EncodeAsVarULE<ZeroSlice<T>> for Vec<T>where
    T: AsULE + 'static,
source§fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
 
fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
cb with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T. Read moresource§fn encode_var_ule_len(&self) -> usize
 
fn encode_var_ule_len(&self) -> usize
VarULE typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
 
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE type to the dst buffer. dst should
be the size of Self::encode_var_ule_len()source§impl<T> EncodeAsVarULE<ZeroSlice<T>> for ZeroVec<'_, T>where
    T: AsULE + 'static,
 
impl<T> EncodeAsVarULE<ZeroSlice<T>> for ZeroVec<'_, T>where
    T: AsULE + 'static,
source§fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
 
fn encode_var_ule_as_slices<R>(&self, _: impl FnOnce(&[&[u8]]) -> R) -> R
cb with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T. Read moresource§fn encode_var_ule_len(&self) -> usize
 
fn encode_var_ule_len(&self) -> usize
VarULE typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
 
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE type to the dst buffer. dst should
be the size of Self::encode_var_ule_len()source§impl<T: AsULE + PartialOrd> PartialOrd for ZeroSlice<T>
 
impl<T: AsULE + PartialOrd> PartialOrd for ZeroSlice<T>
source§impl<T: AsULE + 'static> VarULE for ZeroSlice<T>
 
impl<T: AsULE + 'static> VarULE for ZeroSlice<T>
source§fn validate_byte_slice(bytes: &[u8]) -> Result<(), ZeroVecError>
 
fn validate_byte_slice(bytes: &[u8]) -> Result<(), ZeroVecError>
&[u8]. Read moresource§unsafe fn from_byte_slice_unchecked(bytes: &[u8]) -> &Self
 
unsafe fn from_byte_slice_unchecked(bytes: &[u8]) -> &Self
&[u8], and return it as &Self with the same lifetime, assuming
that this byte slice has previously been run through Self::parse_byte_slice() with
success. Read moresource§fn parse_byte_slice(bytes: &[u8]) -> Result<&Self, ZeroVecError>
 
fn parse_byte_slice(bytes: &[u8]) -> Result<&Self, ZeroVecError>
source§fn as_byte_slice(&self) -> &[u8] ⓘ
 
fn as_byte_slice(&self) -> &[u8] ⓘ
source§impl<'a, T> ZeroMapKV<'a> for ZeroSlice<T>where
    T: AsULE + 'static,
 
impl<'a, T> ZeroMapKV<'a> for ZeroSlice<T>where
    T: AsULE + 'static,
source§type Container = VarZeroVec<'a, ZeroSlice<T>>
 
type Container = VarZeroVec<'a, ZeroSlice<T>>
ZeroVec or VarZeroVec.type Slice = VarZeroSlice<ZeroSlice<T>>
source§impl<T> ZeroVecLike<T> for ZeroSlice<T>
 
impl<T> ZeroVecLike<T> for ZeroSlice<T>
source§type SliceVariant = ZeroSlice<T>
 
type SliceVariant = ZeroSlice<T>
source§fn zvl_new_borrowed() -> &'static Self::SliceVariant
 
fn zvl_new_borrowed() -> &'static Self::SliceVariant
source§fn zvl_binary_search(&self, k: &T) -> Result<usize, usize>where
    T: Ord,
 
fn zvl_binary_search(&self, k: &T) -> Result<usize, usize>where
    T: Ord,
Ok(index) if found,
returns Err(insert_index) if not found, where insert_index is the
index where it should be inserted to maintain sort order.source§fn zvl_binary_search_in_range(
    &self,
    k: &T,
    range: Range<usize>,
) -> Option<Result<usize, usize>>where
    T: Ord,
 
fn zvl_binary_search_in_range(
    &self,
    k: &T,
    range: Range<usize>,
) -> Option<Result<usize, usize>>where
    T: Ord,
None if the range is out of bounds, and
Ok or Err in the same way as zvl_binary_search.
Indices are returned relative to the start of the range.source§fn zvl_binary_search_by(
    &self,
    predicate: impl FnMut(&T) -> Ordering,
) -> Result<usize, usize>
 
fn zvl_binary_search_by( &self, predicate: impl FnMut(&T) -> Ordering, ) -> Result<usize, usize>
Ok(index) if found,
returns Err(insert_index) if not found, where insert_index is the
index where it should be inserted to maintain sort order.source§fn zvl_binary_search_in_range_by(
    &self,
    predicate: impl FnMut(&T) -> Ordering,
    range: Range<usize>,
) -> Option<Result<usize, usize>>
 
fn zvl_binary_search_in_range_by( &self, predicate: impl FnMut(&T) -> Ordering, range: Range<usize>, ) -> Option<Result<usize, usize>>
None if the range is out of bounds, and
Ok or Err in the same way as zvl_binary_search.
Indices are returned relative to the start of the range.source§fn zvl_as_borrowed(&self) -> &ZeroSlice<T>
 
fn zvl_as_borrowed(&self) -> &ZeroSlice<T>
&self. Read moresource§fn zvl_get_as_t<R>(g: &Self::GetType, f: impl FnOnce(&T) -> R) -> R
 
fn zvl_get_as_t<R>(g: &Self::GetType, f: impl FnOnce(&T) -> R) -> R
source§fn zvl_is_empty(&self) -> bool
 
fn zvl_is_empty(&self) -> bool
impl<T> Eq for ZeroSlice<T>
Auto Trait Implementations§
impl<T> Freeze for ZeroSlice<T>
impl<T> RefUnwindSafe for ZeroSlice<T>
impl<T> Send for ZeroSlice<T>
impl<T> !Sized for ZeroSlice<T>
impl<T> Sync for ZeroSlice<T>
impl<T> Unpin for ZeroSlice<T>
impl<T> UnwindSafe for ZeroSlice<T>
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
source§impl<T> EncodeAsVarULE<T> for T
 
impl<T> EncodeAsVarULE<T> for T
source§fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
 
fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R
cb with a piecewise list of byte slices that when concatenated
produce the memory pattern of the corresponding instance of T. Read moresource§fn encode_var_ule_len(&self) -> usize
 
fn encode_var_ule_len(&self) -> usize
VarULE typesource§fn encode_var_ule_write(&self, dst: &mut [u8])
 
fn encode_var_ule_write(&self, dst: &mut [u8])
VarULE type to the dst buffer. dst should
be the size of Self::encode_var_ule_len()