zerovec::ule

Struct MultiFieldsULE

Source
pub struct MultiFieldsULE<const LEN: usize, Format: VarZeroVecFormat>(/* private fields */);
Expand description

This type is used by the custom derive to represent multiple VarULE fields packed into a single end-of-struct field. It is not recommended to use this type directly, use Tuple2VarULE etc instead.

Logically, consider it to be (, , , ..) where `` etc are potentially different VarULE types.

Internally, it is represented by a VarZeroSlice without the length part.

Implementations§

Source§

impl<const LEN: usize, Format: VarZeroVecFormat> MultiFieldsULE<LEN, Format>

Source

pub fn compute_encoded_len_for(lengths: [usize; LEN]) -> usize

Compute the amount of bytes needed to support elements with lengths lengths

Source

pub fn new_from_lengths_partially_initialized<'a>( lengths: [usize; LEN], output: &'a mut [u8], ) -> &'a mut Self

Construct a partially initialized MultiFieldsULE backed by a mutable byte buffer

Source

pub unsafe fn set_field_at<T: VarULE + ?Sized, A: EncodeAsVarULE<T> + ?Sized>( &mut self, idx: usize, value: &A, )

Given a buffer of size obtained by Self::compute_encoded_len_for(), write element A to index idx

§Safety
  • idx must be in range
  • T must be the appropriate type expected by the custom derive in this usage of this type
Source

pub unsafe fn validate_field<T: VarULE + ?Sized>( &self, index: usize, ) -> Result<(), UleError>

Validate field at index to see if it is a valid T VarULE type

§Safety
  • index must be in range
Source

pub unsafe fn get_field<T: VarULE + ?Sized>(&self, index: usize) -> &T

Get field at index as a value of type T

§Safety
  • index must be in range
  • Element at index must have been created with the VarULE type T
Source

pub unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self

Construct from a byte slice

§Safety
  • byte slice must be a valid VarZeroLengthlessSlice<u8, Format> with length LEN
Source

pub fn as_bytes(&self) -> &[u8]

Get the bytes behind this value

Trait Implementations§

Source§

impl<const LEN: usize, Format: VarZeroVecFormat> Debug for MultiFieldsULE<LEN, Format>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<const LEN: usize, Format: PartialEq + VarZeroVecFormat> PartialEq for MultiFieldsULE<LEN, Format>

Source§

fn eq(&self, other: &MultiFieldsULE<LEN, Format>) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<const LEN: usize, Format: VarZeroVecFormat> VarULE for MultiFieldsULE<LEN, Format>

Source§

fn validate_bytes(slice: &[u8]) -> Result<(), UleError>

Note: MultiFieldsULE is usually used in cases where one should be calling .validate_field() directly for each field, rather than using the regular VarULE impl.

This impl exists so that EncodeAsVarULE can work.

Source§

unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self

Takes a byte slice, &[u8], and return it as &Self with the same lifetime, assuming that this byte slice has previously been run through Self::parse_bytes() with success. Read more
Source§

fn parse_bytes(bytes: &[u8]) -> Result<&Self, UleError>

Parses a byte slice, &[u8], and return it as &Self with the same lifetime. Read more
Source§

fn as_bytes(&self) -> &[u8]

Given &Self, returns a &[u8] with the same lifetime. Read more
Source§

fn to_boxed(&self) -> Box<Self>

Allocate on the heap as a Box<T>
Source§

impl<const LEN: usize, Format: Eq + VarZeroVecFormat> Eq for MultiFieldsULE<LEN, Format>

Source§

impl<const LEN: usize, Format: VarZeroVecFormat> StructuralPartialEq for MultiFieldsULE<LEN, Format>

Auto Trait Implementations§

§

impl<const LEN: usize, Format> Freeze for MultiFieldsULE<LEN, Format>

§

impl<const LEN: usize, Format> RefUnwindSafe for MultiFieldsULE<LEN, Format>
where Format: RefUnwindSafe,

§

impl<const LEN: usize, Format> Send for MultiFieldsULE<LEN, Format>
where Format: Send,

§

impl<const LEN: usize, Format> !Sized for MultiFieldsULE<LEN, Format>

§

impl<const LEN: usize, Format> Sync for MultiFieldsULE<LEN, Format>
where Format: Sync,

§

impl<const LEN: usize, Format> Unpin for MultiFieldsULE<LEN, Format>
where Format: Unpin,

§

impl<const LEN: usize, Format> UnwindSafe for MultiFieldsULE<LEN, Format>
where Format: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> EncodeAsVarULE<T> for T
where T: VarULE + ?Sized,

Source§

fn encode_var_ule_as_slices<R>(&self, cb: impl FnOnce(&[&[u8]]) -> R) -> R

Calls cb with a piecewise list of byte slices that when concatenated produce the memory pattern of the corresponding instance of T. Read more
Source§

fn encode_var_ule_len(&self) -> usize

Return the length, in bytes, of the corresponding VarULE type
Source§

fn encode_var_ule_write(&self, dst: &mut [u8])

Write the corresponding VarULE type to the dst buffer. dst should be the size of Self::encode_var_ule_len()