pull_lever.rs 593 B

12345678910111213141516171819202122
  1. use hand_api::prelude::*;
  2. use lever_api::prelude::*;
  3. use steel::*;
  4. pub fn process_pull_lever(accounts: &[AccountInfo<'_>], data: &[u8]) -> ProgramResult {
  5. // Parse args.
  6. let args = PullLever::try_from_bytes(data)?;
  7. let name = bytes_to_str(&args.name);
  8. // Load accounts.
  9. let [power_info, lever_program] = accounts else {
  10. return Err(ProgramError::NotEnoughAccountKeys);
  11. };
  12. power_info.is_writable()?;
  13. let ix = switch_power(*power_info.key, &name);
  14. solana_program::program::invoke(&ix, &[power_info.clone(), lever_program.clone()])?;
  15. Ok(())
  16. }