1#![no_std]
8
9extern crate alloc;
10
11use pinocchio::{
12 account_info::AccountInfo,
13 entrypoint,
14 program_error::ProgramError,
15 pubkey::Pubkey,
16 ProgramResult,
17};
18
19pub mod constants;
20pub mod error;
21pub mod instructions;
22pub mod state;
23
24entrypoint!(process_instruction);
26
27pub fn process_instruction(
37 program_id: &Pubkey,
38 accounts: &[AccountInfo],
39 instruction_data: &[u8],
40) -> ProgramResult {
41 if instruction_data.is_empty() {
42 return Err(ProgramError::InvalidInstructionData);
43 }
44
45 let instruction = instruction_data[0];
46 let data = &instruction_data[1..];
47
48 match instruction {
49 0 => instructions::escrow::create::process(program_id, accounts, data),
51 1 => instructions::escrow::confirm::process(program_id, accounts, data),
52 2 => instructions::escrow::refund::process(program_id, accounts, data),
53
54 3 => instructions::credits::deposit::process(program_id, accounts, data),
56 4 => instructions::credits::spend::process(program_id, accounts, data),
57 5 => instructions::credits::withdraw::process(program_id, accounts, data),
58
59 _ => Err(ProgramError::InvalidInstructionData),
60 }
61}