carbon_sharky_decoder/instructions/
mod.rs

1use crate::PROGRAM_ID;
2
3use super::SharkyDecoder;
4pub mod close_nft_list;
5pub mod close_order_book;
6pub mod create_nft_list;
7pub mod create_order_book;
8pub mod create_program_version;
9pub mod extend_loan_v3;
10pub mod extend_loan_v3_compressed;
11pub mod foreclose_loan_v3;
12pub mod foreclose_loan_v3_compressed;
13pub mod offer_loan;
14pub mod repay_loan_v3;
15pub mod repay_loan_v3_compressed;
16pub mod rescind_loan;
17pub mod take_loan_v3;
18pub mod take_loan_v3_compressed;
19pub mod update_nft_list;
20pub mod update_order_book;
21pub mod update_program_version;
22
23#[derive(
24    carbon_core::InstructionType,
25    serde::Serialize,
26    serde::Deserialize,
27    PartialEq,
28    Eq,
29    Debug,
30    Clone,
31    Hash,
32)]
33pub enum SharkyInstruction {
34    CreateOrderBook(create_order_book::CreateOrderBook),
35    UpdateOrderBook(update_order_book::UpdateOrderBook),
36    CloseOrderBook(close_order_book::CloseOrderBook),
37    OfferLoan(offer_loan::OfferLoan),
38    RescindLoan(rescind_loan::RescindLoan),
39    TakeLoanV3(take_loan_v3::TakeLoanV3),
40    TakeLoanV3Compressed(take_loan_v3_compressed::TakeLoanV3Compressed),
41    ForecloseLoanV3(foreclose_loan_v3::ForecloseLoanV3),
42    ForecloseLoanV3Compressed(foreclose_loan_v3_compressed::ForecloseLoanV3Compressed),
43    RepayLoanV3Compressed(repay_loan_v3_compressed::RepayLoanV3Compressed),
44    RepayLoanV3(repay_loan_v3::RepayLoanV3),
45    ExtendLoanV3(extend_loan_v3::ExtendLoanV3),
46    ExtendLoanV3Compressed(extend_loan_v3_compressed::ExtendLoanV3Compressed),
47    CreateNftList(create_nft_list::CreateNftList),
48    UpdateNftList(update_nft_list::UpdateNftList),
49    CloseNftList(close_nft_list::CloseNftList),
50    CreateProgramVersion(create_program_version::CreateProgramVersion),
51    UpdateProgramVersion(update_program_version::UpdateProgramVersion),
52}
53
54impl carbon_core::instruction::InstructionDecoder<'_> for SharkyDecoder {
55    type InstructionType = SharkyInstruction;
56
57    fn decode_instruction(
58        &self,
59        instruction: &solana_instruction::Instruction,
60    ) -> Option<carbon_core::instruction::DecodedInstruction<Self::InstructionType>> {
61        if !instruction.program_id.eq(&PROGRAM_ID) {
62            return None;
63        }
64
65        carbon_core::try_decode_instructions!(instruction,
66            SharkyInstruction::CreateOrderBook => create_order_book::CreateOrderBook,
67            SharkyInstruction::UpdateOrderBook => update_order_book::UpdateOrderBook,
68            SharkyInstruction::CloseOrderBook => close_order_book::CloseOrderBook,
69            SharkyInstruction::OfferLoan => offer_loan::OfferLoan,
70            SharkyInstruction::RescindLoan => rescind_loan::RescindLoan,
71            SharkyInstruction::TakeLoanV3 => take_loan_v3::TakeLoanV3,
72            SharkyInstruction::TakeLoanV3Compressed => take_loan_v3_compressed::TakeLoanV3Compressed,
73            SharkyInstruction::ForecloseLoanV3 => foreclose_loan_v3::ForecloseLoanV3,
74            SharkyInstruction::ForecloseLoanV3Compressed => foreclose_loan_v3_compressed::ForecloseLoanV3Compressed,
75            SharkyInstruction::RepayLoanV3Compressed => repay_loan_v3_compressed::RepayLoanV3Compressed,
76            SharkyInstruction::RepayLoanV3 => repay_loan_v3::RepayLoanV3,
77            SharkyInstruction::ExtendLoanV3 => extend_loan_v3::ExtendLoanV3,
78            SharkyInstruction::ExtendLoanV3Compressed => extend_loan_v3_compressed::ExtendLoanV3Compressed,
79            SharkyInstruction::CreateNftList => create_nft_list::CreateNftList,
80            SharkyInstruction::UpdateNftList => update_nft_list::UpdateNftList,
81            SharkyInstruction::CloseNftList => close_nft_list::CloseNftList,
82            SharkyInstruction::CreateProgramVersion => create_program_version::CreateProgramVersion,
83            SharkyInstruction::UpdateProgramVersion => update_program_version::UpdateProgramVersion,
84        )
85    }
86}