spl_type_length_value::state

Struct TlvStateMut

Source
pub struct TlvStateMut<'data> { /* private fields */ }
Expand description

Encapsulates mutable base state data (mint or account) with possible extensions

Implementations§

Source§

impl<'data> TlvStateMut<'data>

Source

pub fn unpack(data: &'data mut [u8]) -> Result<Self, ProgramError>

Unpacks TLV state data

Fails if no state is initialized or if data is too small

Source

pub fn get_value_with_repetition_mut<V: SplDiscriminate + Pod>( &mut self, repetition_number: usize, ) -> Result<&mut V, ProgramError>

Unpack a portion of the TLV data as the desired type that allows modifying the type for the entry number specified

Source

pub fn get_first_value_mut<V: SplDiscriminate + Pod>( &mut self, ) -> Result<&mut V, ProgramError>

Unpack a portion of the TLV data as the desired type that allows modifying the type for the first entry found

Source

pub fn get_bytes_with_repetition_mut<V: SplDiscriminate>( &mut self, repetition_number: usize, ) -> Result<&mut [u8], ProgramError>

Unpack a portion of the TLV data as mutable bytes for the entry number specified

Source

pub fn get_first_bytes_mut<V: SplDiscriminate>( &mut self, ) -> Result<&mut [u8], ProgramError>

Unpack a portion of the TLV data as mutable bytes for the first entry found

Source

pub fn init_value<V: SplDiscriminate + Pod + Default>( &mut self, allow_repetition: bool, ) -> Result<(&mut V, usize), ProgramError>

Packs the default TLV data into the first open slot in the data buffer. Handles repetition based on the boolean arg provided:

  • true: If extension is already found in the buffer, it returns an error.
  • false: Will add a new entry to the next open slot.
Source

pub fn pack_variable_len_value_with_repetition<V: SplDiscriminate + VariableLenPack>( &mut self, value: &V, repetition_number: usize, ) -> Result<(), ProgramError>

Packs a variable-length value into its appropriate data segment, where repeating discriminators are allowed

Source

pub fn pack_first_variable_len_value<V: SplDiscriminate + VariableLenPack>( &mut self, value: &V, ) -> Result<(), ProgramError>

Packs a variable-length value into its appropriate data segment, where no repeating discriminators are allowed

Source

pub fn alloc<V: SplDiscriminate>( &mut self, length: usize, allow_repetition: bool, ) -> Result<(&mut [u8], usize), ProgramError>

Allocate the given number of bytes for the given SplDiscriminate

Source

pub fn alloc_and_pack_variable_len_entry<V: SplDiscriminate + VariableLenPack>( &mut self, value: &V, allow_repetition: bool, ) -> Result<usize, ProgramError>

Allocates and serializes a new TLV entry from a VariableLenPack type

Source

pub fn realloc_with_repetition<V: SplDiscriminate>( &mut self, length: usize, repetition_number: usize, ) -> Result<&mut [u8], ProgramError>

Reallocate the given number of bytes for the given SplDiscriminate. If the new length is smaller, it will compact the rest of the buffer and zero out the difference at the end. If it’s larger, it will move the rest of the buffer data and zero out the new data.

Source

pub fn realloc_first<V: SplDiscriminate>( &mut self, length: usize, ) -> Result<&mut [u8], ProgramError>

Reallocate the given number of bytes for the given SplDiscriminate, where no repeating discriminators are allowed

Trait Implementations§

Source§

impl<'data> Debug for TlvStateMut<'data>

Source§

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

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

impl<'data> PartialEq for TlvStateMut<'data>

Source§

fn eq(&self, other: &TlvStateMut<'data>) -> 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<'a> TlvState for TlvStateMut<'a>

Source§

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

Get the full buffer containing all TLV data
Source§

fn get_value_with_repetition<V: SplDiscriminate + Pod>( &self, repetition_number: usize, ) -> Result<&V, ProgramError>

Unpack a portion of the TLV data as the desired Pod type for the entry number specified
Source§

fn get_first_value<V: SplDiscriminate + Pod>(&self) -> Result<&V, ProgramError>

Unpack a portion of the TLV data as the desired Pod type for the first entry found
Source§

fn get_variable_len_value_with_repetition<V: SplDiscriminate + VariableLenPack>( &self, repetition_number: usize, ) -> Result<V, ProgramError>

Unpacks a portion of the TLV data as the desired variable-length type for the entry number specified
Source§

fn get_first_variable_len_value<V: SplDiscriminate + VariableLenPack>( &self, ) -> Result<V, ProgramError>

Unpacks a portion of the TLV data as the desired variable-length type for the first entry found
Source§

fn get_bytes_with_repetition<V: SplDiscriminate>( &self, repetition_number: usize, ) -> Result<&[u8], ProgramError>

Unpack a portion of the TLV data as bytes for the entry number specified
Source§

fn get_first_bytes<V: SplDiscriminate>(&self) -> Result<&[u8], ProgramError>

Unpack a portion of the TLV data as bytes for the first entry found
Source§

fn get_discriminators(&self) -> Result<Vec<ArrayDiscriminator>, ProgramError>

Iterates through the TLV entries, returning only the types
Source§

fn get_base_len() -> usize

Get the base size required for TLV data
Source§

impl<'data> StructuralPartialEq for TlvStateMut<'data>

Auto Trait Implementations§

§

impl<'data> Freeze for TlvStateMut<'data>

§

impl<'data> RefUnwindSafe for TlvStateMut<'data>

§

impl<'data> Send for TlvStateMut<'data>

§

impl<'data> Sync for TlvStateMut<'data>

§

impl<'data> Unpin for TlvStateMut<'data>

§

impl<'data> !UnwindSafe for TlvStateMut<'data>

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V