light-token 0.4.0

SDK for Light Tokens
Documentation
use light_account_checks::AccountError;
use light_sdk::error::LightSdkError;
use light_sdk_types::error::LightSdkTypesError;
use light_token_interface::TokenError;
use light_token_types::error::LightTokenSdkTypeError;
use light_zero_copy::errors::ZeroCopyError;
use solana_program_error::ProgramError;
use thiserror::Error;

pub type Result<T> = std::result::Result<T, TokenSdkError>;

#[derive(Debug, Error)]
pub enum TokenSdkError {
    #[error("Insufficient balance")]
    InsufficientBalance,
    #[error("Serialization error")]
    SerializationError,
    #[error("CPI error: {0}")]
    CpiError(String),
    #[error("Cannot compress and decompress")]
    CannotCompressAndDecompress,
    #[error("Compression cannot be set twice")]
    CompressionCannotBeSetTwice,
    #[error("Inconsistent compress/decompress state")]
    InconsistentCompressDecompressState,
    #[error("Both compress and decompress specified")]
    BothCompressAndDecompress,
    #[error("Invalid compress/decompress amount")]
    InvalidCompressDecompressAmount,
    #[error("Ctoken::transfer, compress, or decompress cannot be used with fn transfer(), fn compress(), fn decompress()")]
    MethodUsed,
    #[error("DecompressedMintConfig is required for decompressed mints")]
    DecompressedMintConfigRequired,
    #[error("Invalid compress input owner")]
    InvalidCompressInputOwner,
    #[error("Account borrow failed")]
    AccountBorrowFailed,
    #[error("Invalid account data")]
    InvalidAccountData,
    #[error("Missing required CPI account")]
    MissingCpiAccount,
    #[error("Too many accounts")]
    TooManyAccounts,
    #[error("PackedAccount indices are not continuous")]
    NonContinuousIndices,
    #[error("PackedAccount index out of bounds")]
    PackedAccountIndexOutOfBounds,
    #[error("Cannot mint with decompressed mint in CPI write mode")]
    CannotMintWithDecompressedInCpiWrite,
    #[error("RentAuthorityIsNone")]
    RentAuthorityIsNone,
    #[error("Incomplete SPL interface")]
    IncompleteSplInterface,
    #[error("SPL interface required")]
    SplInterfaceRequired,
    #[error("Use regular SPL transfer")]
    UseRegularSplTransfer,
    #[error("Cannot determine account type")]
    CannotDetermineAccountType,
    #[error("MintActionMetaConfig::new_cpi_context requires cpi_context data")]
    CpiContextRequired,
    #[error("Missing mint account")]
    MissingMintAccount,
    #[error("Missing SPL token program")]
    MissingSplTokenProgram,
    #[error("Missing SPL interface PDA")]
    MissingSplInterfacePda,
    #[error("Missing SPL interface PDA bump")]
    MissingSplInterfacePdaBump,
    #[error("Invalid CPI context: first_set_context or set_context must be true")]
    InvalidCpiContext,
    #[error("No input accounts provided")]
    NoInputAccounts,
    #[error("Missing Compressible extension on Light Token account")]
    MissingCompressibleExtension,
    #[error("Invalid Token account data")]
    InvalidTokenAccount,
    #[error("SPL token program mismatch between source and destination")]
    SplTokenProgramMismatch,
    #[error(transparent)]
    CompressedTokenTypes(#[from] LightTokenSdkTypeError),
    #[error(transparent)]
    TokenError(#[from] TokenError),
    #[error(transparent)]
    LightSdkError(#[from] LightSdkError),
    #[error(transparent)]
    LightSdkTypesError(#[from] LightSdkTypesError),
    #[error(transparent)]
    ZeroCopyError(#[from] ZeroCopyError),
    #[error(transparent)]
    AccountError(#[from] AccountError),
}
#[cfg(feature = "anchor")]
impl From<TokenSdkError> for anchor_lang::prelude::ProgramError {
    fn from(e: TokenSdkError) -> Self {
        ProgramError::Custom(e.into())
    }
}
#[cfg(not(feature = "anchor"))]
impl From<TokenSdkError> for ProgramError {
    fn from(e: TokenSdkError) -> Self {
        ProgramError::Custom(e.into())
    }
}

impl From<TokenSdkError> for u32 {
    fn from(e: TokenSdkError) -> Self {
        match e {
            TokenSdkError::InsufficientBalance => 17001,
            TokenSdkError::SerializationError => 17002,
            TokenSdkError::CpiError(_) => 17003,
            TokenSdkError::CannotCompressAndDecompress => 17004,
            TokenSdkError::CompressionCannotBeSetTwice => 17005,
            TokenSdkError::InconsistentCompressDecompressState => 17006,
            TokenSdkError::BothCompressAndDecompress => 17007,
            TokenSdkError::InvalidCompressDecompressAmount => 17008,
            TokenSdkError::MethodUsed => 17009,
            TokenSdkError::DecompressedMintConfigRequired => 17010,
            TokenSdkError::InvalidCompressInputOwner => 17011,
            TokenSdkError::AccountBorrowFailed => 17012,
            TokenSdkError::InvalidAccountData => 17013,
            TokenSdkError::MissingCpiAccount => 17014,
            TokenSdkError::TooManyAccounts => 17015,
            TokenSdkError::NonContinuousIndices => 17016,
            TokenSdkError::PackedAccountIndexOutOfBounds => 17017,
            TokenSdkError::CannotMintWithDecompressedInCpiWrite => 17018,
            TokenSdkError::RentAuthorityIsNone => 17019,
            TokenSdkError::SplInterfaceRequired => 17020,
            TokenSdkError::IncompleteSplInterface => 17021,
            TokenSdkError::UseRegularSplTransfer => 17022,
            TokenSdkError::CannotDetermineAccountType => 17023,
            TokenSdkError::CpiContextRequired => 17024,
            TokenSdkError::MissingMintAccount => 17025,
            TokenSdkError::MissingSplTokenProgram => 17026,
            TokenSdkError::MissingSplInterfacePda => 17027,
            TokenSdkError::MissingSplInterfacePdaBump => 17028,
            TokenSdkError::InvalidCpiContext => 17029,
            TokenSdkError::NoInputAccounts => 17030,
            TokenSdkError::MissingCompressibleExtension => 17031,
            TokenSdkError::InvalidTokenAccount => 17032,
            TokenSdkError::SplTokenProgramMismatch => 17033,
            TokenSdkError::CompressedTokenTypes(e) => e.into(),
            TokenSdkError::TokenError(e) => e.into(),
            TokenSdkError::LightSdkTypesError(e) => e.into(),
            TokenSdkError::LightSdkError(e) => e.into(),
            TokenSdkError::ZeroCopyError(e) => e.into(),
            TokenSdkError::AccountError(e) => e.into(),
        }
    }
}