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