1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- use borsh::{BorshDeserialize, BorshSerialize};
- use solana_program::{
- account_info::AccountInfo, entrypoint, entrypoint::ProgramResult, msg,
- program_error::ProgramError, pubkey::Pubkey,
- };
- use crate::instructions::{eat_food, get_on_ride, play_game};
- // For processing everything at the entrypoint
- entrypoint!(process_instruction);
- #[derive(BorshSerialize, BorshDeserialize, Debug)]
- pub struct CarnivalInstructionData {
- pub name: String,
- pub height: u32,
- pub ticket_count: u32,
- pub attraction: String,
- pub attraction_name: String,
- }
- pub fn process_instruction(
- _program_id: &Pubkey,
- _accounts: &[AccountInfo],
- instruction_data: &[u8],
- ) -> ProgramResult {
- let ix_data_object = CarnivalInstructionData::try_from_slice(instruction_data)?;
- msg!("Welcome to the carnival, {}!", ix_data_object.name);
- match ix_data_object.attraction.as_str() {
- "ride" => get_on_ride::get_on_ride(get_on_ride::GetOnRideInstructionData {
- rider_name: ix_data_object.name,
- rider_height: ix_data_object.height,
- rider_ticket_count: ix_data_object.ticket_count,
- ride: ix_data_object.attraction_name,
- }),
- "game" => play_game::play_game(play_game::PlayGameInstructionData {
- gamer_name: ix_data_object.name,
- gamer_ticket_count: ix_data_object.ticket_count,
- game: ix_data_object.attraction_name,
- }),
- "food" => eat_food::eat_food(eat_food::EatFoodInstructionData {
- eater_name: ix_data_object.name,
- eater_ticket_count: ix_data_object.ticket_count,
- food_stand: ix_data_object.attraction_name,
- }),
- _ => Err(ProgramError::InvalidInstructionData),
- }
- }
|