marsh/
lib.rs

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}