1mod claim;
2mod close;
3mod evolve;
4mod initialize;
5mod mine;
6mod open;
7mod reset;
8mod stake;
9mod update;
10mod update_evolver;
11mod upgrade;
12
13use claim::*;
14use close::*;
15use evolve::*;
16use initialize::*;
17use mine::*;
18use open::*;
19use reset::*;
20use stake::*;
21use update::*;
22use update_evolver::*;
23use upgrade::*;
24
25use marsh_api::instruction::*;
26use solana_program::{
27 self, account_info::AccountInfo, entrypoint::ProgramResult, program_error::ProgramError,
28 pubkey::Pubkey,
29};
30
31solana_program::entrypoint!(process_instruction);
32
33pub fn process_instruction(
34 program_id: &Pubkey,
35 accounts: &[AccountInfo],
36 data: &[u8],
37) -> ProgramResult {
38 if program_id.ne(&marsh_api::id()) {
39 return Err(ProgramError::IncorrectProgramId);
40 }
41
42 let (tag, data) = data
43 .split_first()
44 .ok_or(ProgramError::InvalidInstructionData)?;
45
46 match MarshInstruction::try_from(*tag).or(Err(ProgramError::InvalidInstructionData))? {
47 MarshInstruction::Claim => process_claim(accounts, data)?,
48 MarshInstruction::Close => process_close(accounts, data)?,
49 MarshInstruction::Mine => process_mine(accounts, data)?,
50 MarshInstruction::Open => process_open(accounts, data)?,
51 MarshInstruction::Reset => process_reset(accounts, data)?,
52 MarshInstruction::Stake => process_stake(accounts, data)?,
53 MarshInstruction::Update => process_update(accounts, data)?,
54 MarshInstruction::Upgrade => process_upgrade(accounts, data)?,
55 MarshInstruction::Evolve => process_evolve(accounts, data)?,
56 MarshInstruction::Initialize => process_initialize(accounts, data)?,
57 MarshInstruction::UpdateEvolver => process_update_evolver(accounts, data)?,
58 }
59
60 Ok(())
61}