Skip to main content

defituna_client/generated/instructions/
set_tuna_spot_position_limit_orders.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//!
7
8use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const SET_TUNA_SPOT_POSITION_LIMIT_ORDERS_DISCRIMINATOR: [u8; 8] = [10, 180, 19, 205, 169, 133, 52, 118];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct SetTunaSpotPositionLimitOrders {
16      
17              
18          pub authority: solana_pubkey::Pubkey,
19          
20              
21          pub tuna_position: solana_pubkey::Pubkey,
22      }
23
24impl SetTunaSpotPositionLimitOrders {
25  pub fn instruction(&self, args: SetTunaSpotPositionLimitOrdersInstructionArgs) -> solana_instruction::Instruction {
26    self.instruction_with_remaining_accounts(args, &[])
27  }
28  #[allow(clippy::arithmetic_side_effects)]
29  #[allow(clippy::vec_init_then_push)]
30  pub fn instruction_with_remaining_accounts(&self, args: SetTunaSpotPositionLimitOrdersInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
31    let mut accounts = Vec::with_capacity(2+ remaining_accounts.len());
32                            accounts.push(solana_instruction::AccountMeta::new_readonly(
33            self.authority,
34            true
35          ));
36                                          accounts.push(solana_instruction::AccountMeta::new(
37            self.tuna_position,
38            false
39          ));
40                      accounts.extend_from_slice(remaining_accounts);
41    let mut data = borsh::to_vec(&SetTunaSpotPositionLimitOrdersInstructionData::new()).unwrap();
42          let mut args = borsh::to_vec(&args).unwrap();
43      data.append(&mut args);
44    
45    solana_instruction::Instruction {
46      program_id: crate::TUNA_ID,
47      accounts,
48      data,
49    }
50  }
51}
52
53#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
54#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
55 pub struct SetTunaSpotPositionLimitOrdersInstructionData {
56            discriminator: [u8; 8],
57                  }
58
59impl SetTunaSpotPositionLimitOrdersInstructionData {
60  pub fn new() -> Self {
61    Self {
62                        discriminator: [10, 180, 19, 205, 169, 133, 52, 118],
63                                              }
64  }
65}
66
67impl Default for SetTunaSpotPositionLimitOrdersInstructionData {
68  fn default() -> Self {
69    Self::new()
70  }
71}
72
73#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
74#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
75 pub struct SetTunaSpotPositionLimitOrdersInstructionArgs {
76                  pub lower_limit_order_sqrt_price: u128,
77                pub upper_limit_order_sqrt_price: u128,
78      }
79
80
81/// Instruction builder for `SetTunaSpotPositionLimitOrders`.
82///
83/// ### Accounts:
84///
85                ///   0. `[signer]` authority
86                ///   1. `[writable]` tuna_position
87#[derive(Clone, Debug, Default)]
88pub struct SetTunaSpotPositionLimitOrdersBuilder {
89            authority: Option<solana_pubkey::Pubkey>,
90                tuna_position: Option<solana_pubkey::Pubkey>,
91                        lower_limit_order_sqrt_price: Option<u128>,
92                upper_limit_order_sqrt_price: Option<u128>,
93        __remaining_accounts: Vec<solana_instruction::AccountMeta>,
94}
95
96impl SetTunaSpotPositionLimitOrdersBuilder {
97  pub fn new() -> Self {
98    Self::default()
99  }
100            #[inline(always)]
101    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
102                        self.authority = Some(authority);
103                    self
104    }
105            #[inline(always)]
106    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
107                        self.tuna_position = Some(tuna_position);
108                    self
109    }
110                    #[inline(always)]
111      pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
112        self.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
113        self
114      }
115                #[inline(always)]
116      pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
117        self.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
118        self
119      }
120        /// Add an additional account to the instruction.
121  #[inline(always)]
122  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
123    self.__remaining_accounts.push(account);
124    self
125  }
126  /// Add additional accounts to the instruction.
127  #[inline(always)]
128  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
129    self.__remaining_accounts.extend_from_slice(accounts);
130    self
131  }
132  #[allow(clippy::clone_on_copy)]
133  pub fn instruction(&self) -> solana_instruction::Instruction {
134    let accounts = SetTunaSpotPositionLimitOrders {
135                              authority: self.authority.expect("authority is not set"),
136                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
137                      };
138          let args = SetTunaSpotPositionLimitOrdersInstructionArgs {
139                                                              lower_limit_order_sqrt_price: self.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
140                                                                  upper_limit_order_sqrt_price: self.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
141                                    };
142    
143    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
144  }
145}
146
147  /// `set_tuna_spot_position_limit_orders` CPI accounts.
148  pub struct SetTunaSpotPositionLimitOrdersCpiAccounts<'a, 'b> {
149          
150                    
151              pub authority: &'b solana_account_info::AccountInfo<'a>,
152                
153                    
154              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
155            }
156
157/// `set_tuna_spot_position_limit_orders` CPI instruction.
158pub struct SetTunaSpotPositionLimitOrdersCpi<'a, 'b> {
159  /// The program to invoke.
160  pub __program: &'b solana_account_info::AccountInfo<'a>,
161      
162              
163          pub authority: &'b solana_account_info::AccountInfo<'a>,
164          
165              
166          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
167            /// The arguments for the instruction.
168    pub __args: SetTunaSpotPositionLimitOrdersInstructionArgs,
169  }
170
171impl<'a, 'b> SetTunaSpotPositionLimitOrdersCpi<'a, 'b> {
172  pub fn new(
173    program: &'b solana_account_info::AccountInfo<'a>,
174          accounts: SetTunaSpotPositionLimitOrdersCpiAccounts<'a, 'b>,
175              args: SetTunaSpotPositionLimitOrdersInstructionArgs,
176      ) -> Self {
177    Self {
178      __program: program,
179              authority: accounts.authority,
180              tuna_position: accounts.tuna_position,
181                    __args: args,
182          }
183  }
184  #[inline(always)]
185  pub fn invoke(&self) -> solana_program_error::ProgramResult {
186    self.invoke_signed_with_remaining_accounts(&[], &[])
187  }
188  #[inline(always)]
189  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
190    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
191  }
192  #[inline(always)]
193  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
194    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
195  }
196  #[allow(clippy::arithmetic_side_effects)]
197  #[allow(clippy::clone_on_copy)]
198  #[allow(clippy::vec_init_then_push)]
199  pub fn invoke_signed_with_remaining_accounts(
200    &self,
201    signers_seeds: &[&[&[u8]]],
202    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
203  ) -> solana_program_error::ProgramResult {
204    let mut accounts = Vec::with_capacity(2+ remaining_accounts.len());
205                            accounts.push(solana_instruction::AccountMeta::new_readonly(
206            *self.authority.key,
207            true
208          ));
209                                          accounts.push(solana_instruction::AccountMeta::new(
210            *self.tuna_position.key,
211            false
212          ));
213                      remaining_accounts.iter().for_each(|remaining_account| {
214      accounts.push(solana_instruction::AccountMeta {
215          pubkey: *remaining_account.0.key,
216          is_signer: remaining_account.1,
217          is_writable: remaining_account.2,
218      })
219    });
220    let mut data = borsh::to_vec(&SetTunaSpotPositionLimitOrdersInstructionData::new()).unwrap();
221          let mut args = borsh::to_vec(&self.__args).unwrap();
222      data.append(&mut args);
223    
224    let instruction = solana_instruction::Instruction {
225      program_id: crate::TUNA_ID,
226      accounts,
227      data,
228    };
229    let mut account_infos = Vec::with_capacity(3 + remaining_accounts.len());
230    account_infos.push(self.__program.clone());
231                  account_infos.push(self.authority.clone());
232                        account_infos.push(self.tuna_position.clone());
233              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
234
235    if signers_seeds.is_empty() {
236      solana_cpi::invoke(&instruction, &account_infos)
237    } else {
238      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
239    }
240  }
241}
242
243/// Instruction builder for `SetTunaSpotPositionLimitOrders` via CPI.
244///
245/// ### Accounts:
246///
247                ///   0. `[signer]` authority
248                ///   1. `[writable]` tuna_position
249#[derive(Clone, Debug)]
250pub struct SetTunaSpotPositionLimitOrdersCpiBuilder<'a, 'b> {
251  instruction: Box<SetTunaSpotPositionLimitOrdersCpiBuilderInstruction<'a, 'b>>,
252}
253
254impl<'a, 'b> SetTunaSpotPositionLimitOrdersCpiBuilder<'a, 'b> {
255  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
256    let instruction = Box::new(SetTunaSpotPositionLimitOrdersCpiBuilderInstruction {
257      __program: program,
258              authority: None,
259              tuna_position: None,
260                                            lower_limit_order_sqrt_price: None,
261                                upper_limit_order_sqrt_price: None,
262                    __remaining_accounts: Vec::new(),
263    });
264    Self { instruction }
265  }
266      #[inline(always)]
267    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
268                        self.instruction.authority = Some(authority);
269                    self
270    }
271      #[inline(always)]
272    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
273                        self.instruction.tuna_position = Some(tuna_position);
274                    self
275    }
276                    #[inline(always)]
277      pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
278        self.instruction.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
279        self
280      }
281                #[inline(always)]
282      pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
283        self.instruction.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
284        self
285      }
286        /// Add an additional account to the instruction.
287  #[inline(always)]
288  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
289    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
290    self
291  }
292  /// Add additional accounts to the instruction.
293  ///
294  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
295  /// and a `bool` indicating whether the account is a signer or not.
296  #[inline(always)]
297  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
298    self.instruction.__remaining_accounts.extend_from_slice(accounts);
299    self
300  }
301  #[inline(always)]
302  pub fn invoke(&self) -> solana_program_error::ProgramResult {
303    self.invoke_signed(&[])
304  }
305  #[allow(clippy::clone_on_copy)]
306  #[allow(clippy::vec_init_then_push)]
307  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
308          let args = SetTunaSpotPositionLimitOrdersInstructionArgs {
309                                                              lower_limit_order_sqrt_price: self.instruction.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
310                                                                  upper_limit_order_sqrt_price: self.instruction.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
311                                    };
312        let instruction = SetTunaSpotPositionLimitOrdersCpi {
313        __program: self.instruction.__program,
314                  
315          authority: self.instruction.authority.expect("authority is not set"),
316                  
317          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
318                          __args: args,
319            };
320    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
321  }
322}
323
324#[derive(Clone, Debug)]
325struct SetTunaSpotPositionLimitOrdersCpiBuilderInstruction<'a, 'b> {
326  __program: &'b solana_account_info::AccountInfo<'a>,
327            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
328                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
329                        lower_limit_order_sqrt_price: Option<u128>,
330                upper_limit_order_sqrt_price: Option<u128>,
331        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
332  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
333}
334