use gemachain_program::{instruction::Instruction, pubkey::Pubkey}; use gemachain_sdk::signature::Keypair; use gpl_governance::{ addins::voter_weight::VoterWeightRecord, state::{ governance::Governance, proposal::Proposal, proposal_instruction::ProposalInstruction, realm::Realm, realm_config::RealmConfigAccount, signatory_record::SignatoryRecord, token_owner_record::TokenOwnerRecord, vote_record::VoteRecord, }, }; use gpl_governance_test_sdk::tools::clone_keypair; pub trait AccountCookie { fn get_address(&self) -> Pubkey; } #[derive(Debug)] pub struct RealmCookie { pub address: Pubkey, pub account: Realm, pub community_mint_authority: Keypair, pub community_token_holding_account: Pubkey, pub council_mint_authority: Option, pub council_token_holding_account: Option, pub realm_authority: Option, pub realm_config: Option, } #[derive(Debug)] pub struct RealmConfigCookie { pub address: Pubkey, pub account: RealmConfigAccount, } #[derive(Debug)] pub struct TokenOwnerRecordCookie { pub address: Pubkey, pub account: TokenOwnerRecord, pub token_source: Pubkey, pub token_source_amount: u64, pub token_owner: Keypair, pub governance_authority: Option, pub governance_delegate: Keypair, pub voter_weight_record: Option, } impl TokenOwnerRecordCookie { pub fn get_governance_authority(&self) -> &Keypair { self.governance_authority .as_ref() .unwrap_or(&self.token_owner) } #[allow(dead_code)] pub fn clone_governance_delegate(&self) -> Keypair { clone_keypair(&self.governance_delegate) } } #[derive(Debug)] pub struct GovernedProgramCookie { pub address: Pubkey, pub upgrade_authority: Keypair, pub data_address: Pubkey, pub transfer_upgrade_authority: bool, } impl AccountCookie for GovernedProgramCookie { fn get_address(&self) -> Pubkey { self.address } } #[derive(Debug)] pub struct GovernedMintCookie { pub address: Pubkey, pub mint_authority: Keypair, pub transfer_mint_authority: bool, } impl AccountCookie for GovernedMintCookie { fn get_address(&self) -> Pubkey { self.address } } #[derive(Debug)] pub struct GovernedTokenCookie { pub address: Pubkey, pub token_owner: Keypair, pub transfer_token_owner: bool, pub token_mint: Pubkey, } impl AccountCookie for GovernedTokenCookie { fn get_address(&self) -> Pubkey { self.address } } #[derive(Debug)] pub struct GovernedAccountCookie { pub address: Pubkey, } impl AccountCookie for GovernedAccountCookie { fn get_address(&self) -> Pubkey { self.address } } #[derive(Debug)] pub struct GovernanceCookie { pub address: Pubkey, pub account: Governance, pub next_proposal_index: u32, } #[derive(Debug)] pub struct ProposalCookie { pub address: Pubkey, pub account: Proposal, pub proposal_owner: Pubkey, } #[derive(Debug)] pub struct SignatoryRecordCookie { pub address: Pubkey, pub account: SignatoryRecord, pub signatory: Keypair, } #[derive(Debug)] pub struct VoteRecordCookie { pub address: Pubkey, pub account: VoteRecord, } #[derive(Debug)] pub struct ProposalInstructionCookie { pub address: Pubkey, pub account: ProposalInstruction, pub instruction: Instruction, } #[derive(Debug, Clone)] pub struct VoterWeightRecordCookie { pub address: Pubkey, pub account: VoterWeightRecord, }