use solana_sdk::pubkey::Pubkey;
#[derive(Debug)]
pub enum CatscopeWasmError {
NotFound(String), InvalidInput(String), NetworkError, InsufficientBuffer, InsufficientMemory, OutOfRange, TimeOut,
FailedToParse, UnknownAccount, Unknown(String), MissingWasmBytes,
WasmFailure(String),
GenericError(Box<dyn std::error::Error + Send + Sync>),
TransactionError(Box<dyn std::error::Error + Send + Sync>),
DoubleWriting, PayloadTooBig(usize),
SliceWrongSize,
EmptyPayload,
NotImplemented,
MissingHeader,
MissingSlotGraphNode,
MissingProgramId,
InsufficientCpu,
UnknownMessageType,
MismatchedHash,
VersionMismatch,
PubkeyNodeIdMismatch,
MissingPubkey(Pubkey),
MissingEnvironmentalVariable(String),
}
impl std::fmt::Display for CatscopeWasmError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
CatscopeWasmError::NotFound(msg) => write!(f, "Not Found: {}", msg),
CatscopeWasmError::InvalidInput(msg) => write!(f, "Invalid Input: {}", msg),
CatscopeWasmError::WasmFailure(msg) => write!(f, "WASM failure: {}", msg),
CatscopeWasmError::MissingWasmBytes => write!(f, "missing wasm bytes"),
CatscopeWasmError::NetworkError => write!(f, "Network Error occurred"),
CatscopeWasmError::FailedToParse => write!(f, "failed to parse"),
CatscopeWasmError::EmptyPayload => write!(f, "empty payload"),
CatscopeWasmError::UnknownAccount => write!(f, "unknown account"),
CatscopeWasmError::InsufficientBuffer => write!(f, "Requested buffer is too large"),
CatscopeWasmError::InsufficientMemory => write!(f, "Requested memory is too large"),
CatscopeWasmError::OutOfRange => write!(f, "index is out of range"),
CatscopeWasmError::GenericError(e) => write!(f, "generic: {}", e),
CatscopeWasmError::TransactionError(e) => write!(f, "transaction: {}", e),
CatscopeWasmError::PayloadTooBig(s) => write!(f, "payload {} is too big", s),
CatscopeWasmError::Unknown(e) => write!(f, "unknown: {}", e),
CatscopeWasmError::TimeOut => write!(f, "timed out"),
CatscopeWasmError::DoubleWriting => {
write!(f, "cannot write to same blob multiple times")
}
CatscopeWasmError::NotImplemented => {
write!(f, "not implemented yet")
}
CatscopeWasmError::InsufficientCpu => write!(f, "insufficient cpu"),
CatscopeWasmError::MismatchedHash => write!(f, "mismatching hash"),
CatscopeWasmError::MissingHeader => write!(f, "missing header"),
CatscopeWasmError::MissingSlotGraphNode => write!(f, "missing slot graph node"),
CatscopeWasmError::UnknownMessageType => write!(f, "unknown message type"),
CatscopeWasmError::VersionMismatch => write!(f, "message version mismatch"),
CatscopeWasmError::MissingProgramId => write!(f, "missing program id"),
CatscopeWasmError::PubkeyNodeIdMismatch => write!(f, "mismatching program id"),
CatscopeWasmError::MissingPubkey(e) => write!(f, "missing pubkey {}", e),
CatscopeWasmError::SliceWrongSize => write!(f, "slice is the wrong size"),
CatscopeWasmError::MissingEnvironmentalVariable(e) => {
write!(f, "missing environmental variable {}", e)
}
}
}
}