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