carbon_points_decoder/instructions/
spend_points.rs

1use carbon_core::{CarbonDeserialize, account_utils::next_account, borsh};
2
3#[derive(
4    CarbonDeserialize, Debug, serde::Serialize, serde::Deserialize, PartialEq, Eq, Clone, Hash,
5)]
6#[carbon(discriminator = "0x83593f62f3d4e066")]
7pub struct SpendPoints {
8    pub points_amount: u64,
9    pub key_index: u16,
10}
11
12#[derive(Debug, PartialEq, Eq, Clone, Hash, serde::Serialize, serde::Deserialize)]
13pub struct SpendPointsInstructionAccounts {
14    pub spender: solana_pubkey::Pubkey,
15    pub spender_profile: solana_pubkey::Pubkey,
16    pub category: solana_pubkey::Pubkey,
17    pub user_points_account: solana_pubkey::Pubkey,
18}
19
20impl carbon_core::deserialize::ArrangeAccounts for SpendPoints {
21    type ArrangedAccounts = SpendPointsInstructionAccounts;
22
23    fn arrange_accounts(
24        accounts: &[solana_instruction::AccountMeta],
25    ) -> Option<Self::ArrangedAccounts> {
26        let mut iter = accounts.iter();
27        let spender = next_account(&mut iter)?;
28        let spender_profile = next_account(&mut iter)?;
29        let category = next_account(&mut iter)?;
30        let user_points_account = next_account(&mut iter)?;
31
32        Some(SpendPointsInstructionAccounts {
33            spender,
34            spender_profile,
35            category,
36            user_points_account,
37        })
38    }
39}