Skip to main content

carbon_wavebreak_decoder/instructions/
create_launch.rs

1//! This code was AUTOGENERATED using the Codama library.
2use {
3    crate::types::GraduationMethod,
4    carbon_core::{account_utils::next_account, deserialize::ArrangeAccounts},
5};
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[derive(Debug, Clone, borsh::BorshSerialize, borsh::BorshDeserialize, PartialEq)]
8pub struct CreateLaunch {
9    pub name: String,
10    pub symbol: String,
11    pub uri: String,
12    pub start_price: Option<u128>,
13    pub end_price: Option<u128>,
14    pub control_points: Option<[u16; 4]>,
15    pub graduation_target: Option<u64>,
16    pub graduation_methods: Option<[GraduationMethod; 8]>,
17    pub launch_time: Option<i64>,
18    pub graduation_time: Option<i64>,
19    pub base_allocation_bps: Option<u16>,
20}
21
22#[derive(Debug, Clone, PartialEq)]
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
24pub struct CreateLaunchInstructionAccounts {
25    pub creator: solana_pubkey::Pubkey,
26    pub bonding_curve: solana_pubkey::Pubkey,
27    pub base_mint: solana_pubkey::Pubkey,
28    pub quote_mint: solana_pubkey::Pubkey,
29    pub quote_vault: solana_pubkey::Pubkey,
30    pub mint_config: solana_pubkey::Pubkey,
31    pub metadata: solana_pubkey::Pubkey,
32    pub system_program: solana_pubkey::Pubkey,
33    pub base_token_program: solana_pubkey::Pubkey,
34    pub quote_token_program: solana_pubkey::Pubkey,
35    pub ata_program: solana_pubkey::Pubkey,
36    pub metaplex_program: solana_pubkey::Pubkey,
37    pub remaining: Vec<solana_instruction::AccountMeta>,
38}
39
40impl CreateLaunch {
41    pub fn decode(data: &[u8]) -> Option<Self> {
42        if data.is_empty() {
43            return None;
44        }
45        let discriminator = &data[0..1];
46        if discriminator != [41] {
47            return None;
48        }
49
50        let mut data_slice = data;
51
52        data_slice = &data_slice[1..];
53
54        borsh::BorshDeserialize::deserialize(&mut data_slice).ok()
55    }
56}
57
58impl ArrangeAccounts for CreateLaunch {
59    type ArrangedAccounts = CreateLaunchInstructionAccounts;
60
61    fn arrange_accounts(
62        accounts: &[solana_instruction::AccountMeta],
63    ) -> Option<Self::ArrangedAccounts> {
64        let mut iter = accounts.iter();
65
66        let creator = next_account(&mut iter)?;
67        let bonding_curve = next_account(&mut iter)?;
68        let base_mint = next_account(&mut iter)?;
69        let quote_mint = next_account(&mut iter)?;
70        let quote_vault = next_account(&mut iter)?;
71        let mint_config = next_account(&mut iter)?;
72        let metadata = next_account(&mut iter)?;
73        let system_program = next_account(&mut iter)?;
74        let base_token_program = next_account(&mut iter)?;
75        let quote_token_program = next_account(&mut iter)?;
76        let ata_program = next_account(&mut iter)?;
77        let metaplex_program = next_account(&mut iter)?;
78
79        let remaining = iter.as_slice();
80
81        Some(CreateLaunchInstructionAccounts {
82            creator,
83            bonding_curve,
84            base_mint,
85            quote_mint,
86            quote_vault,
87            mint_config,
88            metadata,
89            system_program,
90            base_token_program,
91            quote_token_program,
92            ata_program,
93            metaplex_program,
94            remaining: remaining.to_vec(),
95        })
96    }
97}