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>
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
idxmust be in rangeTmust 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
indexmust be in range- Element at
indexmust 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()