carbon_token_2022_decoder/instructions/
initialize_pausable_config.rs

1//! This code was AUTOGENERATED using the Codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun Codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7use carbon_core::account_utils::next_account;
8use carbon_core::borsh;
9use carbon_core::deserialize::ArrangeAccounts;
10use carbon_core::deserialize::CarbonDeserialize;
11use carbon_core::CarbonDeserialize;
12use solana_pubkey::Pubkey;
13
14/// Initialize a new mint with the `Pausable` extension.
15///
16/// Fails if the mint has already been initialized, so must be called before `InitializeMint`.
17#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
18#[derive(Debug, Clone, PartialEq)]
19pub struct InitializePausableConfig {
20    pub pausable_discriminator: u8,
21    /// The authority that can pause and resume the mint.
22    pub authority: Option<Pubkey>,
23}
24
25#[derive(Debug, Clone, borsh::BorshSerialize, CarbonDeserialize, PartialEq)]
26pub struct InitializePausableConfigDeser {
27    pub pausable_discriminator: u8,
28    pub authority: spl_pod::optional_keys::OptionalNonZeroPubkey,
29}
30
31#[derive(Debug, Clone, PartialEq)]
32#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
33pub struct InitializePausableConfigInstructionAccounts {
34    pub mint: solana_pubkey::Pubkey,
35    pub remaining: Vec<solana_instruction::AccountMeta>,
36}
37
38impl InitializePausableConfig {
39    pub fn decode(data: &[u8]) -> Option<Self> {
40        if data.len() < 2 {
41            return None;
42        }
43        let discriminator = &data[0..1];
44        if discriminator != [44] {
45            return None;
46        }
47        let pausable_discriminator = data[1];
48        if pausable_discriminator != 0 {
49            return None;
50        }
51
52        let data_slice = data;
53
54        let data_slice = &data_slice[1..];
55
56        let pausable_config = InitializePausableConfigDeser::deserialize(data_slice)?;
57
58        Some(InitializePausableConfig {
59            pausable_discriminator: pausable_config.pausable_discriminator,
60            authority: pausable_config.authority.into(),
61        })
62    }
63}
64
65impl ArrangeAccounts for InitializePausableConfig {
66    type ArrangedAccounts = InitializePausableConfigInstructionAccounts;
67
68    fn arrange_accounts(
69        accounts: &[solana_instruction::AccountMeta],
70    ) -> Option<Self::ArrangedAccounts> {
71        let mut iter = accounts.iter();
72
73        let mint = next_account(&mut iter)?;
74
75        let remaining = iter.as_slice();
76
77        Some(InitializePausableConfigInstructionAccounts {
78            mint,
79            remaining: remaining.to_vec(),
80        })
81    }
82}