use bytemuck::{Pod, Zeroable};
use solana_pubkey::Pubkey;
use spl_discriminator::SplDiscriminate;
use super::pod::PodU128;
#[derive(Debug, Clone, Copy, Pod, Zeroable, SplDiscriminate)]
#[discriminator_hash_input("account:ReferrerTokenState")]
#[repr(C)]
pub struct ReferrerTokenState {
pub referrer: Pubkey,
pub mint: Pubkey,
pub amount_unclaimed_sf: PodU128,
pub amount_cumulative_sf: PodU128,
pub bump: u64,
pub padding: [u64; 31],
}
const _: () = assert!(core::mem::size_of::<ReferrerTokenState>() == 352);
impl ReferrerTokenState {
pub fn amount_unclaimed(&self) -> u128 {
u128::from(self.amount_unclaimed_sf)
}
pub fn amount_cumulative(&self) -> u128 {
u128::from(self.amount_cumulative_sf)
}
}
#[derive(Debug, Clone, Copy, Zeroable, Pod, SplDiscriminate)]
#[discriminator_hash_input("account:UserMetadata")]
#[repr(C)]
pub struct UserMetadata {
pub referrer: Pubkey,
pub bump: u64,
pub user_lookup_table: Pubkey,
pub owner: Pubkey,
pub padding_1: [u64; 51],
pub padding_2: [u64; 64],
}
const _: () = assert!(core::mem::size_of::<UserMetadata>() == 1024);
impl UserMetadata {
pub fn referrer(&self) -> Option<Pubkey> {
if self.referrer == Pubkey::default() {
None
} else {
Some(self.referrer)
}
}
}
#[derive(Debug, Clone, Copy, Zeroable, Pod, SplDiscriminate)]
#[discriminator_hash_input("account:ReferrerState")]
#[repr(C)]
pub struct ReferrerState {
pub short_url: Pubkey,
pub owner: Pubkey,
}
const _: () = assert!(core::mem::size_of::<ReferrerState>() == 64);