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<TlvStateMut<'data>> for TlvStateMut<'data>

source§

fn eq(&self, other: &TlvStateMut<'data>) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

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

This method 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> 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§

§

impl<T> AbiExample for T

§

default fn example() -> T

source§

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

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

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

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere 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 Twhere 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.

§

impl<T> Pointable for T

§

const ALIGN: usize = mem::align_of::<T>()

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same<T> for T

§

type Output = T

Should always be Self
source§

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

§

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 Twhere U: TryFrom<T>,

§

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.
§

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

§

fn vzip(self) -> V