carbon_fluxbeam_decoder/instructions/
initialize.rs

1use super::super::types::*;
2
3use carbon_core::{borsh, CarbonDeserialize};
4
5#[derive(
6    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
7)]
8#[carbon(discriminator = "0x00")]
9pub struct Initialize {
10    pub fees: Fees,
11    pub swap_curve: SwapCurve,
12}
13
14#[derive(Debug, PartialEq)]
15pub struct InitializeInstructionAccounts {
16    pub swap: solana_pubkey::Pubkey,
17    pub authority: solana_pubkey::Pubkey,
18    pub token_a: solana_pubkey::Pubkey,
19    pub token_b: solana_pubkey::Pubkey,
20    pub pool: solana_pubkey::Pubkey,
21    pub fee: solana_pubkey::Pubkey,
22    pub destination: solana_pubkey::Pubkey,
23    pub token_program: solana_pubkey::Pubkey,
24}
25
26impl carbon_core::deserialize::ArrangeAccounts for Initialize {
27    type ArrangedAccounts = InitializeInstructionAccounts;
28
29    fn arrange_accounts(
30        accounts: &[solana_instruction::AccountMeta],
31    ) -> Option<Self::ArrangedAccounts> {
32        let [swap, authority, token_a, token_b, pool, fee, destination, token_program, _remaining @ ..] =
33            accounts
34        else {
35            return None;
36        };
37
38        Some(InitializeInstructionAccounts {
39            swap: swap.pubkey,
40            authority: authority.pubkey,
41            token_a: token_a.pubkey,
42            token_b: token_b.pubkey,
43            pool: pool.pubkey,
44            fee: fee.pubkey,
45            destination: destination.pubkey,
46            token_program: token_program.pubkey,
47        })
48    }
49}