jupiter_interface/
accounts.rs1use 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}