hayabusa_errors/
error_code.rs

1// Copyright (c) 2025, Arcane Labs <dev@arcane.fi>
2// SPDX-License-Identifier: Apache-2.0
3
4use pinocchio::program_error::{ProgramError, ToStr};
5
6#[derive(Debug, PartialEq, Eq)]
7pub enum ErrorCode {
8    UnknownInstruction = 100,
9    BufferFull,
10    InvalidAccountDiscriminator,
11    AccountNotSigner,
12    InvalidAccount,
13    AccountNotWritable,
14}
15
16impl TryFrom<u32> for ErrorCode {
17    type Error = ProgramError;
18
19    fn try_from(value: u32) -> Result<Self, Self::Error> {
20        match value {
21            100 => Ok(ErrorCode::UnknownInstruction),
22            101 => Ok(ErrorCode::BufferFull),
23            102 => Ok(ErrorCode::InvalidAccountDiscriminator),
24            105 => Ok(ErrorCode::AccountNotSigner),
25            106 => Ok(ErrorCode::InvalidAccount),
26            107 => Ok(ErrorCode::AccountNotWritable),
27            _ => Err(ProgramError::InvalidArgument),
28        }
29    }
30}
31
32impl From<ErrorCode> for ProgramError {
33    fn from(e: ErrorCode) -> Self {
34        ProgramError::Custom(e as u32)
35    }
36}
37
38impl ToStr for ErrorCode {
39    fn to_str<E>(&self) -> &'static str
40    where
41        E: ToStr + TryFrom<u32> + 'static,
42    {
43        match self {
44            ErrorCode::UnknownInstruction => "Error: Unknown instruction",
45            ErrorCode::BufferFull => "Error: Buffer full",
46            ErrorCode::InvalidAccountDiscriminator => "Error: Invalid account discriminator",
47            ErrorCode::AccountNotSigner => "Error: Account is not a signer",
48            ErrorCode::InvalidAccount => "Error: Invalid account",
49            ErrorCode::AccountNotWritable => "Error: Account is not writable",
50        }
51    }
52}