Struct zerovec::ule::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 (V1, V2, V3, ..)
where V1
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>
impl<const LEN: usize, Format: VarZeroVecFormat> MultiFieldsULE<LEN, Format>
sourcepub fn compute_encoded_len_for(lengths: [usize; LEN]) -> usize
pub fn compute_encoded_len_for(lengths: [usize; LEN]) -> usize
Compute the amount of bytes needed to support elements with lengths lengths
sourcepub fn new_from_lengths_partially_initialized<'a>(
lengths: [usize; LEN],
output: &'a mut [u8],
) -> &'a mut Self
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
sourcepub unsafe fn set_field_at<T: VarULE + ?Sized, A: EncodeAsVarULE<T> + ?Sized>(
&mut self,
idx: usize,
value: &A,
)
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 rangeT
must be the appropriate type expected by the custom derive in this usage of this type
sourcepub unsafe fn validate_field<T: VarULE + ?Sized>(
&self,
index: usize,
) -> Result<(), UleError>
pub unsafe fn validate_field<T: VarULE + ?Sized>( &self, index: usize, ) -> Result<(), UleError>
sourcepub unsafe fn get_field<T: VarULE + ?Sized>(&self, index: usize) -> &T
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
sourcepub unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self
pub unsafe fn from_bytes_unchecked(bytes: &[u8]) -> &Self
Trait Implementations§
source§impl<const LEN: usize, Format: VarZeroVecFormat> Debug for MultiFieldsULE<LEN, Format>
impl<const LEN: usize, Format: VarZeroVecFormat> Debug for MultiFieldsULE<LEN, Format>
source§impl<const LEN: usize, Format: PartialEq + VarZeroVecFormat> PartialEq for MultiFieldsULE<LEN, Format>
impl<const LEN: usize, Format: PartialEq + VarZeroVecFormat> PartialEq for MultiFieldsULE<LEN, Format>
source§impl<const LEN: usize, Format: VarZeroVecFormat> VarULE for MultiFieldsULE<LEN, Format>
impl<const LEN: usize, Format: VarZeroVecFormat> VarULE for MultiFieldsULE<LEN, Format>
source§fn validate_bytes(slice: &[u8]) -> Result<(), UleError>
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
unsafe fn from_bytes_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_bytes()
with
success. Read moreimpl<const LEN: usize, Format: Eq + VarZeroVecFormat> Eq for MultiFieldsULE<LEN, Format>
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> 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()