use {anchor_lang::prelude::*, hpl_utils::Default};
#[account]
pub struct DelegateAuthority {
pub bump: u8,
pub project: Pubkey,
pub authority: Pubkey,
pub delegations: Vec<ServiceDelegation>,
}
impl Default for DelegateAuthority {
const LEN: usize = 96 + 8; fn set_defaults(&mut self) {
self.bump = 0;
self.project = Pubkey::default();
self.authority = Pubkey::default();
self.delegations = vec![];
}
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub enum ServiceDelegation {
Master {
permission: MasterProgramPermission,
},
AssetHub {
index: u8,
permission: AssetHubPermission,
},
NectarUtility {
index: u8,
permission: NectarUtilityPermission,
},
}
impl ServiceDelegation {
pub const LEN: usize = 2; }
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub enum MasterProgramPermission {
ManageCriterias,
ManageServices,
ManageIndexing,
ManageProfiles,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub enum AssetHubPermission {
ManageAssembler,
UpdateBlock,
UpdateBlockDefinition,
UpdateNFT,
InitialArtGeneration,
ManageAssets,
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub enum NectarUtilityPermission {
ManageStakingPool,
WithdrawStakingPoolRewards,
ManageMissionPool,
WithdrawMissionPoolRewards,
}