Skip to main content

riptide_amm/generated/accounts/
market.rs

1//! This code was AUTOGENERATED using the codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6
7use 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}