use crate::{structs::*, utils::*};
use anchor_lang::prelude::*;
#[derive(Accounts)]
pub struct CreateAssetManager<'info> {
pub key: AccountInfo<'info>,
#[account(
init, payer = payer,
space = DESCRIMINATOR_SIZE + AssetManager::LEN + EXTRA_SIZE,
seeds = [
b"asset_manager".as_ref(),
key.key().as_ref(),
],
bump,
)]
pub asset_manager: Account<'info, AssetManager>,
pub treasury: AccountInfo<'info>,
pub authority: AccountInfo<'info>,
#[account(mut)]
pub payer: Signer<'info>,
pub system_program: Program<'info, System>,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub struct CreateAssetManagerArgs {
pub name: String,
}
pub fn create_asset_manager(
ctx: Context<CreateAssetManager>,
args: CreateAssetManagerArgs,
) -> Result<()> {
let asset_manager = &mut ctx.accounts.asset_manager;
asset_manager.bump = ctx.bumps["asset_manager"];
asset_manager.key = ctx.accounts.key.key();
asset_manager.authority = ctx.accounts.authority.key();
asset_manager.treasury = ctx.accounts.treasury.key();
asset_manager.name = args.name;
Ok(())
}