riptide_amm/generated/accounts/
market.rs1use crate::generated::types::AccountDiscriminator;
8use borsh::{BorshDeserialize, BorshSerialize};
9use solana_pubkey::Pubkey;
10
11#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
12#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
13pub struct Market {
14 pub discriminator: AccountDiscriminator,
15 pub bump: [u8; 1],
16 pub padding1: [u8; 2],
17 pub id: u32,
18 #[cfg_attr(
19 feature = "serde",
20 serde(with = "serde_with::As::<serde_with::DisplayFromStr>")
21 )]
22 pub authority: Pubkey,
23 #[cfg_attr(
24 feature = "serde",
25 serde(with = "serde_with::As::<serde_with::DisplayFromStr>")
26 )]
27 pub updater: Pubkey,
28 #[cfg_attr(
29 feature = "serde",
30 serde(with = "serde_with::As::<serde_with::DisplayFromStr>")
31 )]
32 pub mint_a: Pubkey,
33 #[cfg_attr(
34 feature = "serde",
35 serde(with = "serde_with::As::<serde_with::DisplayFromStr>")
36 )]
37 pub mint_b: Pubkey,
38 pub sequence: u64,
39 pub valid_until: u64,
40 #[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::Bytes>"))]
41 pub oracle: [u8; 512],
42 #[cfg_attr(feature = "serde", serde(with = "serde_with::As::<serde_with::Bytes>"))]
43 pub padding2: [u8; 360],
44}
45
46pub const MARKET_DISCRIMINATOR: AccountDiscriminator = AccountDiscriminator::Market;
47
48impl Market {
49 pub const LEN: usize = 1024;
50
51 #[inline(always)]
52 pub fn from_bytes(data: &[u8]) -> Result<Self, std::io::Error> {
53 let mut data = data;
54 Self::deserialize(&mut data)
55 }
56}
57
58impl<'a> TryFrom<&solana_account_info::AccountInfo<'a>> for Market {
59 type Error = std::io::Error;
60
61 fn try_from(account_info: &solana_account_info::AccountInfo<'a>) -> Result<Self, Self::Error> {
62 let mut data: &[u8] = &(*account_info.data).borrow();
63 Self::deserialize(&mut data)
64 }
65}
66
67#[cfg(feature = "fetch")]
68pub fn fetch_market(
69 rpc: &solana_client::rpc_client::RpcClient,
70 address: &solana_pubkey::Pubkey,
71) -> Result<crate::shared::DecodedAccount<Market>, std::io::Error> {
72 let accounts = fetch_all_market(rpc, &[*address])?;
73 Ok(accounts[0].clone())
74}
75
76#[cfg(feature = "fetch")]
77pub fn fetch_all_market(
78 rpc: &solana_client::rpc_client::RpcClient,
79 addresses: &[solana_pubkey::Pubkey],
80) -> Result<Vec<crate::shared::DecodedAccount<Market>>, std::io::Error> {
81 let accounts = rpc
82 .get_multiple_accounts(addresses)
83 .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?;
84 let mut decoded_accounts: Vec<crate::shared::DecodedAccount<Market>> = Vec::new();
85 for i in 0..addresses.len() {
86 let address = addresses[i];
87 let account = accounts[i].as_ref().ok_or(std::io::Error::new(
88 std::io::ErrorKind::Other,
89 format!("Account not found: {}", address),
90 ))?;
91 let data = Market::from_bytes(&account.data)?;
92 decoded_accounts.push(crate::shared::DecodedAccount {
93 address,
94 account: account.clone(),
95 data,
96 });
97 }
98 Ok(decoded_accounts)
99}
100
101#[cfg(feature = "fetch")]
102pub fn fetch_maybe_market(
103 rpc: &solana_client::rpc_client::RpcClient,
104 address: &solana_pubkey::Pubkey,
105) -> Result<crate::shared::MaybeAccount<Market>, std::io::Error> {
106 let accounts = fetch_all_maybe_market(rpc, &[*address])?;
107 Ok(accounts[0].clone())
108}
109
110#[cfg(feature = "fetch")]
111pub fn fetch_all_maybe_market(
112 rpc: &solana_client::rpc_client::RpcClient,
113 addresses: &[solana_pubkey::Pubkey],
114) -> Result<Vec<crate::shared::MaybeAccount<Market>>, std::io::Error> {
115 let accounts = rpc
116 .get_multiple_accounts(addresses)
117 .map_err(|e| std::io::Error::new(std::io::ErrorKind::Other, e.to_string()))?;
118 let mut decoded_accounts: Vec<crate::shared::MaybeAccount<Market>> = Vec::new();
119 for i in 0..addresses.len() {
120 let address = addresses[i];
121 if let Some(account) = accounts[i].as_ref() {
122 let data = Market::from_bytes(&account.data)?;
123 decoded_accounts.push(crate::shared::MaybeAccount::Exists(
124 crate::shared::DecodedAccount {
125 address,
126 account: account.clone(),
127 data,
128 },
129 ));
130 } else {
131 decoded_accounts.push(crate::shared::MaybeAccount::NotFound(address));
132 }
133 }
134 Ok(decoded_accounts)
135}
136
137#[cfg(feature = "anchor")]
138impl anchor_lang::AccountDeserialize for Market {
139 fn try_deserialize_unchecked(buf: &mut &[u8]) -> anchor_lang::Result<Self> {
140 Ok(Self::deserialize(buf)?)
141 }
142}
143
144#[cfg(feature = "anchor")]
145impl anchor_lang::AccountSerialize for Market {}
146
147#[cfg(feature = "anchor")]
148impl anchor_lang::Owner for Market {
149 fn owner() -> Pubkey {
150 crate::RIPTIDE_ID
151 }
152}
153
154#[cfg(feature = "anchor-idl-build")]
155impl anchor_lang::IdlBuild for Market {}
156
157#[cfg(feature = "anchor-idl-build")]
158impl anchor_lang::Discriminator for Market {
159 const DISCRIMINATOR: &[u8] = &[0; 8];
160}