Skip to main content

jupiter_interface/
accounts.rs

1use borsh::{BorshDeserialize, BorshSerialize};
2use solana_program::pubkey::Pubkey;
3pub const TOKEN_LEDGER_ACCOUNT_DISCM: [u8; 8] = [156, 247, 9, 188, 54, 108, 85, 77];
4#[derive(Clone, Debug, BorshDeserialize, BorshSerialize, PartialEq)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub struct TokenLedger {
7    pub token_account: Pubkey,
8    pub amount: u64,
9}
10#[derive(Clone, Debug, PartialEq)]
11pub struct TokenLedgerAccount(pub TokenLedger);
12impl TokenLedgerAccount {
13    pub fn deserialize(buf: &[u8]) -> std::io::Result<Self> {
14        use std::io::Read;
15        let mut reader = buf;
16        let mut maybe_discm = [0u8; 8];
17        reader.read_exact(&mut maybe_discm)?;
18        if maybe_discm != TOKEN_LEDGER_ACCOUNT_DISCM {
19            return Err(
20                std::io::Error::new(
21                    std::io::ErrorKind::Other,
22                    format!(
23                        "discm does not match. Expected: {:?}. Received: {:?}",
24                        TOKEN_LEDGER_ACCOUNT_DISCM, maybe_discm
25                    ),
26                ),
27            );
28        }
29        Ok(Self(TokenLedger::deserialize(&mut reader)?))
30    }
31    pub fn serialize<W: std::io::Write>(&self, mut writer: W) -> std::io::Result<()> {
32        writer.write_all(&TOKEN_LEDGER_ACCOUNT_DISCM)?;
33        self.0.serialize(&mut writer)
34    }
35    pub fn try_to_vec(&self) -> std::io::Result<Vec<u8>> {
36        let mut data = Vec::new();
37        self.serialize(&mut data)?;
38        Ok(data)
39    }
40}