use {crate::state::*, anchor_lang::prelude::*};
#[derive(AnchorSerialize, AnchorDeserialize)]
pub struct UpdateNamespaceIx {
pub update_authority: Pubkey,
pub rent_authority: Pubkey,
pub approve_authority: Option<Pubkey>,
pub schema: u8,
pub payment_amount_daily: u64,
pub payment_mint: Pubkey,
pub min_rental_seconds: i64,
pub max_rental_seconds: Option<i64>,
pub transferable_entries: bool,
pub limit: Option<u32>,
pub max_expiration: Option<i64>,
pub invalidation_type: u8,
}
#[derive(Accounts)]
pub struct UpdateNamepsace<'info> {
#[account(
mut,
seeds = [NAMESPACE_PREFIX.as_bytes(), namespace.name.as_ref()],
bump = namespace.bump,
)]
pub namespace: Account<'info, Namespace>,
#[account(constraint = namespace.update_authority == update_authority.key())]
pub update_authority: Signer<'info>,
}
pub fn handler(ctx: Context<UpdateNamepsace>, ix: UpdateNamespaceIx) -> Result<()> {
let namespace = &mut ctx.accounts.namespace;
namespace.update_authority = ix.update_authority;
namespace.rent_authority = ix.rent_authority;
namespace.approve_authority = ix.approve_authority;
namespace.schema = ix.schema;
namespace.payment_amount_daily = ix.payment_amount_daily;
namespace.payment_mint = ix.payment_mint;
namespace.min_rental_seconds = ix.min_rental_seconds;
namespace.max_rental_seconds = ix.max_rental_seconds;
namespace.transferable_entries = ix.transferable_entries;
namespace.limit = ix.limit;
namespace.max_expiration = ix.max_expiration;
namespace.invalidation_type = ix.invalidation_type;
Ok(())
}