lib.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #![allow(clippy::result_large_err)]
  2. use anchor_lang::prelude::*;
  3. declare_id!("CABVoybzrbAJSv7QhQd6GXNGKxDMRjw9niqFzizhk6uk");
  4. #[program]
  5. pub mod lever {
  6. use super::*;
  7. pub fn initialize(_ctx: Context<InitializeLever>) -> Result<()> {
  8. Ok(())
  9. }
  10. pub fn switch_power(ctx: Context<SetPowerStatus>, name: String) -> Result<()> {
  11. let power = &mut ctx.accounts.power;
  12. power.is_on = !power.is_on;
  13. msg!("{} is pulling the power switch!", &name);
  14. match power.is_on {
  15. true => msg!("The power is now on."),
  16. false => msg!("The power is now off!"),
  17. };
  18. Ok(())
  19. }
  20. }
  21. #[derive(Accounts)]
  22. pub struct InitializeLever<'info> {
  23. #[account(init, payer = user, space = 8 + 8)]
  24. pub power: Account<'info, PowerStatus>,
  25. #[account(mut)]
  26. pub user: Signer<'info>,
  27. pub system_program: Program<'info, System>,
  28. }
  29. #[derive(Accounts)]
  30. pub struct SetPowerStatus<'info> {
  31. #[account(mut)]
  32. pub power: Account<'info, PowerStatus>,
  33. }
  34. #[account]
  35. pub struct PowerStatus {
  36. pub is_on: bool,
  37. }