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