carbon_wavebreak_decoder/instructions/
permission_config_initialize.rs1use {
3 crate::types::PermissionSigner,
4 carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts},
5 solana_pubkey::Pubkey,
6};
7#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
8#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
9pub struct PermissionConfigInitialize {
10 pub permission_authority: PermissionSigner,
11 pub consumer_program: Pubkey,
12}
13
14#[derive(Debug, Clone, PartialEq)]
15#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
16pub struct PermissionConfigInitializeInstructionAccounts {
17 pub authority: solana_pubkey::Pubkey,
18 pub permission_config: solana_pubkey::Pubkey,
19 pub authority_config: solana_pubkey::Pubkey,
20 pub system_program: solana_pubkey::Pubkey,
21 pub remaining: Vec<solana_instruction::AccountMeta>,
22}
23
24impl PermissionConfigInitialize {
25 pub fn decode(data: &[u8]) -> Option<Self> {
26 if data.is_empty() {
27 return None;
28 }
29 let discriminator = &data[0..1];
30 if discriminator != [2] {
31 return None;
32 }
33
34 let mut data_slice = data;
35
36 data_slice = &data_slice[1..];
37
38 borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
39 }
40}
41
42impl ArrangeAccounts for PermissionConfigInitialize {
43 type ArrangedAccounts = PermissionConfigInitializeInstructionAccounts;
44
45 fn arrange_accounts(
46 accounts: &[solana_instruction::AccountMeta],
47 ) -> Option<Self::ArrangedAccounts> {
48 let mut iter = accounts.iter();
49
50 let authority = next_account(&mut iter)?;
51 let permission_config = next_account(&mut iter)?;
52 let authority_config = next_account(&mut iter)?;
53 let system_program = next_account(&mut iter)?;
54
55 let remaining = iter.as_slice();
56
57 Some(PermissionConfigInitializeInstructionAccounts {
58 authority,
59 permission_config,
60 authority_config,
61 system_program,
62 remaining: remaining.to_vec(),
63 })
64 }
65}