anchor/tests/zero-copy/programs/zero-cpi/src/lib.rs

36 lines
1.0 KiB
Rust

use anchor_lang::prelude::*;
use zero_copy::cpi::accounts::UpdateBar;
use zero_copy::program::ZeroCopy;
use zero_copy::{self, Bar, Foo};
declare_id!("ErjUjtqKE5AGWUsjseSJCVLtddM6rhaMbDqmhzraF9h6");
#[program]
pub mod zero_cpi {
use super::*;
pub fn check_cpi(ctx: Context<CheckCpi>, data: u64) -> Result<()> {
let cpi_program = ctx.accounts.zero_copy_program.to_account_info();
let cpi_accounts = UpdateBar {
authority: ctx.accounts.authority.clone(),
bar: ctx.accounts.bar.to_account_info(),
foo: ctx.accounts.foo.to_account_info(),
};
let cpi_ctx = CpiContext::new(cpi_program, cpi_accounts);
zero_copy::cpi::update_bar(cpi_ctx, data)?;
Ok(())
}
}
#[derive(Accounts)]
pub struct CheckCpi<'info> {
#[account(
mut,
has_one = authority,
)]
bar: AccountLoader<'info, Bar>,
#[account(signer)]
authority: AccountInfo<'info>,
foo: AccountLoader<'info, Foo>,
zero_copy_program: Program<'info, ZeroCopy>,
}