use num_derive::FromPrimitive;
use thiserror::Error;
#[derive(Clone, Debug, Eq, Error, FromPrimitive, PartialEq)]
pub enum MplDistroError {
#[error("Invalid System Program")]
InvalidSystemProgram,
#[error("Error deserializing account")]
DeserializationError,
#[error("Error serializing account")]
SerializationError,
#[error("Invalid Distribution PDA Derivation")]
InvalidDistributionPdaDerivation,
#[error("Invalid Spl Token Program")]
InvalidSplTokenProgram,
#[error("Invalid Fee Wallet")]
InvalidFeeWallet,
#[error("Invalid Token Program")]
InvalidTokenProgram,
#[error("Invalid Associated Token Program")]
InvalidAssociatedTokenProgram,
#[error("Invalid Distribution Account Owner")]
InvalidDistributionAccountOwner,
#[error("The distribution has already started")]
DistributionStarted,
#[error("Invalid Mint")]
InvalidMint,
#[error("Invalid Distribution Authority")]
InvalidDistributionAuthority,
#[error("Invalid Payer Token Account")]
InvalidPayerTokenAccount,
#[error("Invalid Distribution Token Account")]
InvalidDistributionTokenAccount,
#[error("The distribution has not started yet")]
DistributionNotStarted,
#[error("The distribution has ended")]
DistributionEnded,
#[error("Invalid Recipient Token Account")]
InvalidRecipientTokenAccount,
#[error("Invalid Claim Proof")]
InvalidClaimProof,
#[error("The tokens have already been claimed by this recipient")]
AlreadyClaimed,
#[error("Invalid Claim Receipt PDA Derivation")]
InvalidClaimReceiptPdaDerivation,
#[error("End time must be after start time")]
InvalidDistributionTimeRange,
#[error("Name must be 32 bytes or less")]
NameTooLong,
#[error("Invalid Depositor Token Account")]
InvalidDepositorTokenAccount,
#[error("Mint must be owned by the SPL Token Program")]
InvalidMintOwner,
#[error("Cannot withdraw funds while distribution is active")]
CannotWithdrawDuringActiveDistribution,
#[error("Arithmetic operation overflowed")]
ArithmeticOverflow,
#[error("Insufficient funds in distribution to fulfill claim amount")]
InsufficientFunds,
#[error("Tree height exceeds maximum supported height")]
InvalidTreeHeight,
#[error("Invalid Payer")]
InvalidPayer,
#[error("Insufficient funds in Distribution to subsidize receipts")]
InsufficientFundsToSubsidizeReceipts,
#[error("Invalid NFT Mint")]
InvalidNftMint,
#[error("Invalid NFT Amount")]
InvalidNftAmount,
#[error("Invalid NFT Owner")]
InvalidNftOwner,
#[error("Recipient must sign")]
RecipientMustSign,
#[error("Distribution authority must sign")]
DistributionAuthorityMustSign,
#[error("Invalid Distribution Type")]
InvalidDistributionType,
#[error("Invalid NFT Token Account Owner")]
InvalidNftTokenAccountOwner,
#[error("Insufficient funds in distribution to withdraw requested SOL amount")]
InsufficientFundsToWithdrawSol,
#[error("Distribution does not subsidize receipts")]
DistributionDoesNotSubsidizeReceipts,
#[error("Cannot withdraw while distribution is active")]
CannotWithdrawWhileActive,
#[error("Invalid distributor for this distribution")]
InvalidDistributor,
}
impl solana_program::program_error::PrintProgramError for MplDistroError {
fn print<E>(&self) {
solana_program::msg!(&self.to_string());
}
}