pub struct StateWithExtensionsMut<'data, S: BaseState> {
    pub base: S,
    /* private fields */
}
Expand description

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

Fields§

§base: S

Unpacked base data

Implementations§

source§

impl<'data, S: BaseState> StateWithExtensionsMut<'data, S>

source

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

Unpack base state, leaving the extension data as a mutable slice

Fails if the base state is not initialized.

source

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

Unpack an uninitialized base state, leaving the extension data as a mutable slice

Fails if the base state has already been initialized.

source

pub fn get_extension_mut<V: Extension>( &mut self ) -> Result<&mut V, ProgramError>

Unpack a portion of the TLV data as the desired type that allows modifying the type

source

pub fn pack_base(&mut self)

Packs base state data into the base data portion

source

pub fn init_extension<V: Extension>( &mut self, overwrite: bool ) -> Result<&mut V, ProgramError>

Packs the default extension data into an open slot if not already found in the data buffer. If extension is already found in the buffer, it overwrites the existing extension with the default state if overwrite is set. If extension found, but overwrite is not set, it returns error.

source

pub fn init_account_extension_from_type( &mut self, extension_type: ExtensionType ) -> Result<(), ProgramError>

If extension_type is an Account-associated ExtensionType that requires initialization on InitializeAccount, this method packs the default relevant Extension of an ExtensionType into an open slot if not already found in the data buffer, otherwise overwrites the existing extension with the default state. For all other ExtensionTypes, this is a no-op.

source

pub fn init_account_type(&mut self) -> Result<(), ProgramError>

Write the account type into the buffer, done during the base state initialization Noops if there is no room for an extension in the account, needed for pure base mints / accounts.

Trait Implementations§

source§

impl<'a, S: BaseState> BaseStateWithExtensions<S> for StateWithExtensionsMut<'a, S>

source§

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

Get the buffer containing all extension data
source§

fn get_extension<V: Extension>(&self) -> Result<&V, ProgramError>

Unpack a portion of the TLV data as the desired type
source§

fn get_extension_types(&self) -> Result<Vec<ExtensionType>, ProgramError>

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

fn get_first_extension_type( &self ) -> Result<Option<ExtensionType>, ProgramError>

Get just the first extension type, useful to track mixed initializations
source§

impl<'data, S: Debug + BaseState> Debug for StateWithExtensionsMut<'data, S>

source§

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

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

impl<'data, S: PartialEq + BaseState> PartialEq<StateWithExtensionsMut<'data, S>> for StateWithExtensionsMut<'data, S>

source§

fn eq(&self, other: &StateWithExtensionsMut<'data, S>) -> 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<'data, S: BaseState> StructuralPartialEq for StateWithExtensionsMut<'data, S>

Auto Trait Implementations§

§

impl<'data, S> RefUnwindSafe for StateWithExtensionsMut<'data, S>where S: RefUnwindSafe,

§

impl<'data, S> Send for StateWithExtensionsMut<'data, S>where S: Send,

§

impl<'data, S> Sync for StateWithExtensionsMut<'data, S>where S: Sync,

§

impl<'data, S> Unpin for StateWithExtensionsMut<'data, S>where S: Unpin,

§

impl<'data, S> !UnwindSafe for StateWithExtensionsMut<'data, S>

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,

const: unstable · source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

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

const: unstable · source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

const: unstable · source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

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

const: unstable · 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.
const: unstable · 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.
const: unstable · 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