1use crate::{log::sol_log, program_error::ProgramError};
4
5#[derive(Debug)]
6pub enum SealevelToolsError<'a> {
7 PassThrough(ProgramError),
8
9 AccountInfo(&'a [&'a str]),
15
16 Cpi(&'a [&'a str]),
22}
23
24impl<'a> SealevelToolsError<'a> {
25 pub const ACCOUNT_INFO: u32 = u32::from_be_bytes(
26 crate::discriminator::Discriminator::Sha2(b"sealevel_tools::account_info").to_bytes(),
27 );
28 pub const CPI: u32 = u32::from_be_bytes(
29 crate::discriminator::Discriminator::Sha2(b"sealevel_tools::cpi").to_bytes(),
30 );
31}
32
33impl<'a> From<SealevelToolsError<'a>> for ProgramError {
34 fn from(e: SealevelToolsError) -> ProgramError {
35 let (msgs, code) = match e {
36 SealevelToolsError::PassThrough(err) => return err,
37 SealevelToolsError::AccountInfo(err) => {
38 sol_log("Custom error: AccountInfo");
39 (err, SealevelToolsError::ACCOUNT_INFO)
40 }
41 SealevelToolsError::Cpi(err) => {
42 sol_log("Custom error: CPI");
43 (err, SealevelToolsError::CPI)
44 }
45 };
46
47 msgs.iter().for_each(|err| sol_log(err));
48
49 ProgramError::Custom(code)
50 }
51}
52
53impl<'a> From<ProgramError> for SealevelToolsError<'a> {
54 fn from(e: ProgramError) -> SealevelToolsError<'a> {
55 SealevelToolsError::PassThrough(e)
56 }
57}