pub trait BaseStateWithExtensions<S: BaseState> {
    // Required method
    fn get_tlv_data(&self) -> &[u8] ;

    // Provided methods
    fn get_extension_bytes<V: Extension>(&self) -> Result<&[u8], ProgramError> { ... }
    fn get_extension<V: Extension + Pod>(&self) -> Result<&V, ProgramError> { ... }
    fn get_variable_len_extension<V: Extension + VariableLenPack>(
        &self
    ) -> Result<V, ProgramError> { ... }
    fn get_extension_types(&self) -> Result<Vec<ExtensionType>, ProgramError> { ... }
    fn get_first_extension_type(
        &self
    ) -> Result<Option<ExtensionType>, ProgramError> { ... }
    fn try_get_account_len(&self) -> Result<usize, ProgramError> { ... }
    fn try_get_new_account_len<V: Extension + VariableLenPack>(
        &self,
        new_extension: &V
    ) -> Result<usize, ProgramError> { ... }
}
Expand description

Trait for base state with extension

Required Methods§

source

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

Get the buffer containing all extension data

Provided Methods§

source

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

Fetch the bytes for a TLV entry

source

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

Unpack a portion of the TLV data as the desired type

source

fn get_variable_len_extension<V: Extension + VariableLenPack>( &self ) -> Result<V, ProgramError>

Unpacks a portion of the TLV data as the desired variable-length 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

fn try_get_account_len(&self) -> Result<usize, ProgramError>

Get the total number of bytes used by TLV entries and the base type

source

fn try_get_new_account_len<V: Extension + VariableLenPack>( &self, new_extension: &V ) -> Result<usize, ProgramError>

Calculate the new expected size if the state allocates the given number of bytes for the given extension type.

Provides the correct answer regardless if the extension is already present in the TLV data.

Implementors§