use {anchor_lang::prelude::*, hpl_utils::traits::*};
#[account]
pub struct Multipliers {
pub bump: u8,
pub staking_pool: Pubkey,
pub decimals: u8,
pub duration_multipliers: Vec<Multiplier>,
pub count_multipliers: Vec<Multiplier>,
pub creator_multipliers: Vec<Multiplier>,
pub collection_multipliers: Vec<Multiplier>,
}
impl Default for Multipliers {
const LEN: usize = 8 + 136;
fn set_defaults(&mut self) {
self.bump = 0;
self.staking_pool = Pubkey::default();
self.decimals = 0;
self.duration_multipliers = vec![];
self.count_multipliers = vec![];
self.creator_multipliers = vec![];
self.collection_multipliers = vec![];
}
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub struct Multiplier {
pub value: u64,
pub multiplier_type: MultiplierType,
}
impl Default for Multiplier {
const LEN: usize = 48;
fn set_defaults(&mut self) {
self.value = 0;
self.multiplier_type = MultiplierType::StakeDuration { min_duration: 0 };
}
}
#[derive(AnchorSerialize, AnchorDeserialize, Clone, Debug, PartialEq)]
pub enum MultiplierType {
StakeDuration { min_duration: u64 },
NFTCount { min_count: u64 },
Creator { creator: Pubkey },
Collection { collection: Pubkey },
}