use {
arch_program::{
decode_error::DecodeError,
msg,
program_error::{PrintProgramError, ProgramError},
},
num_derive::FromPrimitive,
thiserror::Error,
};
#[derive(Clone, Debug, Eq, Error, FromPrimitive, PartialEq)]
pub enum MetadataError {
#[error("Invalid mint")]
InvalidMint,
#[error("Metadata already exists")]
MetadataAlreadyExists,
#[error("Metadata not found")]
MetadataNotFound,
#[error("Invalid authority")]
InvalidAuthority,
#[error("Invalid instruction data")]
InvalidInstructionData,
#[error("String too long")]
StringTooLong,
#[error("Too many attributes")]
TooManyAttributes,
}
impl From<MetadataError> for ProgramError {
fn from(e: MetadataError) -> Self {
ProgramError::Custom(e as u32)
}
}
impl<T> DecodeError<T> for MetadataError {
fn type_of() -> &'static str {
"MetadataError"
}
}
impl PrintProgramError for MetadataError {
fn print<E>(&self)
where
E: 'static
+ std::error::Error
+ DecodeError<E>
+ PrintProgramError
+ num_traits::FromPrimitive,
{
match self {
MetadataError::InvalidMint => msg!("Error: Invalid mint"),
MetadataError::MetadataAlreadyExists => msg!("Error: Metadata already exists"),
MetadataError::MetadataNotFound => msg!("Error: Metadata not found"),
MetadataError::InvalidAuthority => msg!("Error: Invalid authority"),
MetadataError::InvalidInstructionData => msg!("Error: Invalid instruction data"),
MetadataError::StringTooLong => msg!("Error: String too long"),
MetadataError::TooManyAttributes => msg!("Error: Too many attributes"),
}
}
}