anchor/tests/composite/programs/composite/src/lib.rs

65 lines
1.2 KiB
Rust

//! This example demonstrates the ability to compose together multiple
//! structs deriving `Accounts`. See `CompositeUpdate`, below.
use anchor_lang::prelude::*;
declare_id!("EHthziFziNoac9LBGxEaVN47Y3uUiRoXvqAiR6oes4iU");
#[program]
mod composite {
use super::*;
pub fn initialize(_ctx: Context<Initialize>) -> ProgramResult {
Ok(())
}
pub fn composite_update(
ctx: Context<CompositeUpdate>,
dummy_a: u64,
dummy_b: u64,
) -> ProgramResult {
let a = &mut ctx.accounts.foo.dummy_a;
let b = &mut ctx.accounts.bar.dummy_b;
a.data = dummy_a;
b.data = dummy_b;
Ok(())
}
}
#[derive(Accounts)]
pub struct Initialize<'info> {
#[account(zero)]
pub dummy_a: Account<'info, DummyA>,
#[account(zero)]
pub dummy_b: Account<'info, DummyB>,
}
#[derive(Accounts)]
pub struct CompositeUpdate<'info> {
foo: Foo<'info>,
bar: Bar<'info>,
}
#[derive(Accounts)]
pub struct Foo<'info> {
#[account(mut)]
pub dummy_a: Account<'info, DummyA>,
}
#[derive(Accounts)]
pub struct Bar<'info> {
#[account(mut)]
pub dummy_b: Account<'info, DummyB>,
}
#[account]
pub struct DummyA {
pub data: u64,
}
#[account]
pub struct DummyB {
pub data: u64,
}