defituna_client/generated/instructions/
reset_tuna_spot_position.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 crate::generated::types::PoolToken;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12pub const RESET_TUNA_SPOT_POSITION_DISCRIMINATOR: [u8; 8] = [194, 68, 113, 71, 103, 77, 29, 127];
13
14/// Accounts.
15#[derive(Debug)]
16pub struct ResetTunaSpotPosition {
17      
18              
19          pub authority: solana_pubkey::Pubkey,
20          
21              
22          pub mint_a: solana_pubkey::Pubkey,
23          
24              
25          pub mint_b: solana_pubkey::Pubkey,
26          
27              
28          pub tuna_position: solana_pubkey::Pubkey,
29          
30              
31          pub tuna_position_ata_a: solana_pubkey::Pubkey,
32          
33              
34          pub tuna_position_ata_b: solana_pubkey::Pubkey,
35      }
36
37impl ResetTunaSpotPosition {
38  pub fn instruction(&self, args: ResetTunaSpotPositionInstructionArgs) -> solana_instruction::Instruction {
39    self.instruction_with_remaining_accounts(args, &[])
40  }
41  #[allow(clippy::arithmetic_side_effects)]
42  #[allow(clippy::vec_init_then_push)]
43  pub fn instruction_with_remaining_accounts(&self, args: ResetTunaSpotPositionInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
44    let mut accounts = Vec::with_capacity(6+ remaining_accounts.len());
45                            accounts.push(solana_instruction::AccountMeta::new_readonly(
46            self.authority,
47            true
48          ));
49                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
50            self.mint_a,
51            false
52          ));
53                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
54            self.mint_b,
55            false
56          ));
57                                          accounts.push(solana_instruction::AccountMeta::new(
58            self.tuna_position,
59            false
60          ));
61                                          accounts.push(solana_instruction::AccountMeta::new(
62            self.tuna_position_ata_a,
63            false
64          ));
65                                          accounts.push(solana_instruction::AccountMeta::new(
66            self.tuna_position_ata_b,
67            false
68          ));
69                      accounts.extend_from_slice(remaining_accounts);
70    let mut data = borsh::to_vec(&ResetTunaSpotPositionInstructionData::new()).unwrap();
71          let mut args = borsh::to_vec(&args).unwrap();
72      data.append(&mut args);
73    
74    solana_instruction::Instruction {
75      program_id: crate::TUNA_ID,
76      accounts,
77      data,
78    }
79  }
80}
81
82#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
83#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
84 pub struct ResetTunaSpotPositionInstructionData {
85            discriminator: [u8; 8],
86                  }
87
88impl ResetTunaSpotPositionInstructionData {
89  pub fn new() -> Self {
90    Self {
91                        discriminator: [194, 68, 113, 71, 103, 77, 29, 127],
92                                              }
93  }
94}
95
96impl Default for ResetTunaSpotPositionInstructionData {
97  fn default() -> Self {
98    Self::new()
99  }
100}
101
102#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
103#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
104 pub struct ResetTunaSpotPositionInstructionArgs {
105                  pub position_token: PoolToken,
106                pub collateral_token: PoolToken,
107      }
108
109
110/// Instruction builder for `ResetTunaSpotPosition`.
111///
112/// ### Accounts:
113///
114                ///   0. `[signer]` authority
115          ///   1. `[]` mint_a
116          ///   2. `[]` mint_b
117                ///   3. `[writable]` tuna_position
118                ///   4. `[writable]` tuna_position_ata_a
119                ///   5. `[writable]` tuna_position_ata_b
120#[derive(Clone, Debug, Default)]
121pub struct ResetTunaSpotPositionBuilder {
122            authority: Option<solana_pubkey::Pubkey>,
123                mint_a: Option<solana_pubkey::Pubkey>,
124                mint_b: Option<solana_pubkey::Pubkey>,
125                tuna_position: Option<solana_pubkey::Pubkey>,
126                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
127                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
128                        position_token: Option<PoolToken>,
129                collateral_token: Option<PoolToken>,
130        __remaining_accounts: Vec<solana_instruction::AccountMeta>,
131}
132
133impl ResetTunaSpotPositionBuilder {
134  pub fn new() -> Self {
135    Self::default()
136  }
137            #[inline(always)]
138    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
139                        self.authority = Some(authority);
140                    self
141    }
142            #[inline(always)]
143    pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
144                        self.mint_a = Some(mint_a);
145                    self
146    }
147            #[inline(always)]
148    pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
149                        self.mint_b = Some(mint_b);
150                    self
151    }
152            #[inline(always)]
153    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
154                        self.tuna_position = Some(tuna_position);
155                    self
156    }
157            #[inline(always)]
158    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
159                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
160                    self
161    }
162            #[inline(always)]
163    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
164                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
165                    self
166    }
167                    #[inline(always)]
168      pub fn position_token(&mut self, position_token: PoolToken) -> &mut Self {
169        self.position_token = Some(position_token);
170        self
171      }
172                #[inline(always)]
173      pub fn collateral_token(&mut self, collateral_token: PoolToken) -> &mut Self {
174        self.collateral_token = Some(collateral_token);
175        self
176      }
177        /// Add an additional account to the instruction.
178  #[inline(always)]
179  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
180    self.__remaining_accounts.push(account);
181    self
182  }
183  /// Add additional accounts to the instruction.
184  #[inline(always)]
185  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
186    self.__remaining_accounts.extend_from_slice(accounts);
187    self
188  }
189  #[allow(clippy::clone_on_copy)]
190  pub fn instruction(&self) -> solana_instruction::Instruction {
191    let accounts = ResetTunaSpotPosition {
192                              authority: self.authority.expect("authority is not set"),
193                                        mint_a: self.mint_a.expect("mint_a is not set"),
194                                        mint_b: self.mint_b.expect("mint_b is not set"),
195                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
196                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
197                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
198                      };
199          let args = ResetTunaSpotPositionInstructionArgs {
200                                                              position_token: self.position_token.clone().expect("position_token is not set"),
201                                                                  collateral_token: self.collateral_token.clone().expect("collateral_token is not set"),
202                                    };
203    
204    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
205  }
206}
207
208  /// `reset_tuna_spot_position` CPI accounts.
209  pub struct ResetTunaSpotPositionCpiAccounts<'a, 'b> {
210          
211                    
212              pub authority: &'b solana_account_info::AccountInfo<'a>,
213                
214                    
215              pub mint_a: &'b solana_account_info::AccountInfo<'a>,
216                
217                    
218              pub mint_b: &'b solana_account_info::AccountInfo<'a>,
219                
220                    
221              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
222                
223                    
224              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
225                
226                    
227              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
228            }
229
230/// `reset_tuna_spot_position` CPI instruction.
231pub struct ResetTunaSpotPositionCpi<'a, 'b> {
232  /// The program to invoke.
233  pub __program: &'b solana_account_info::AccountInfo<'a>,
234      
235              
236          pub authority: &'b solana_account_info::AccountInfo<'a>,
237          
238              
239          pub mint_a: &'b solana_account_info::AccountInfo<'a>,
240          
241              
242          pub mint_b: &'b solana_account_info::AccountInfo<'a>,
243          
244              
245          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
246          
247              
248          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
249          
250              
251          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
252            /// The arguments for the instruction.
253    pub __args: ResetTunaSpotPositionInstructionArgs,
254  }
255
256impl<'a, 'b> ResetTunaSpotPositionCpi<'a, 'b> {
257  pub fn new(
258    program: &'b solana_account_info::AccountInfo<'a>,
259          accounts: ResetTunaSpotPositionCpiAccounts<'a, 'b>,
260              args: ResetTunaSpotPositionInstructionArgs,
261      ) -> Self {
262    Self {
263      __program: program,
264              authority: accounts.authority,
265              mint_a: accounts.mint_a,
266              mint_b: accounts.mint_b,
267              tuna_position: accounts.tuna_position,
268              tuna_position_ata_a: accounts.tuna_position_ata_a,
269              tuna_position_ata_b: accounts.tuna_position_ata_b,
270                    __args: args,
271          }
272  }
273  #[inline(always)]
274  pub fn invoke(&self) -> solana_program_error::ProgramResult {
275    self.invoke_signed_with_remaining_accounts(&[], &[])
276  }
277  #[inline(always)]
278  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
279    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
280  }
281  #[inline(always)]
282  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
283    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
284  }
285  #[allow(clippy::arithmetic_side_effects)]
286  #[allow(clippy::clone_on_copy)]
287  #[allow(clippy::vec_init_then_push)]
288  pub fn invoke_signed_with_remaining_accounts(
289    &self,
290    signers_seeds: &[&[&[u8]]],
291    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
292  ) -> solana_program_error::ProgramResult {
293    let mut accounts = Vec::with_capacity(6+ remaining_accounts.len());
294                            accounts.push(solana_instruction::AccountMeta::new_readonly(
295            *self.authority.key,
296            true
297          ));
298                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
299            *self.mint_a.key,
300            false
301          ));
302                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
303            *self.mint_b.key,
304            false
305          ));
306                                          accounts.push(solana_instruction::AccountMeta::new(
307            *self.tuna_position.key,
308            false
309          ));
310                                          accounts.push(solana_instruction::AccountMeta::new(
311            *self.tuna_position_ata_a.key,
312            false
313          ));
314                                          accounts.push(solana_instruction::AccountMeta::new(
315            *self.tuna_position_ata_b.key,
316            false
317          ));
318                      remaining_accounts.iter().for_each(|remaining_account| {
319      accounts.push(solana_instruction::AccountMeta {
320          pubkey: *remaining_account.0.key,
321          is_signer: remaining_account.1,
322          is_writable: remaining_account.2,
323      })
324    });
325    let mut data = borsh::to_vec(&ResetTunaSpotPositionInstructionData::new()).unwrap();
326          let mut args = borsh::to_vec(&self.__args).unwrap();
327      data.append(&mut args);
328    
329    let instruction = solana_instruction::Instruction {
330      program_id: crate::TUNA_ID,
331      accounts,
332      data,
333    };
334    let mut account_infos = Vec::with_capacity(7 + remaining_accounts.len());
335    account_infos.push(self.__program.clone());
336                  account_infos.push(self.authority.clone());
337                        account_infos.push(self.mint_a.clone());
338                        account_infos.push(self.mint_b.clone());
339                        account_infos.push(self.tuna_position.clone());
340                        account_infos.push(self.tuna_position_ata_a.clone());
341                        account_infos.push(self.tuna_position_ata_b.clone());
342              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
343
344    if signers_seeds.is_empty() {
345      solana_cpi::invoke(&instruction, &account_infos)
346    } else {
347      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
348    }
349  }
350}
351
352/// Instruction builder for `ResetTunaSpotPosition` via CPI.
353///
354/// ### Accounts:
355///
356                ///   0. `[signer]` authority
357          ///   1. `[]` mint_a
358          ///   2. `[]` mint_b
359                ///   3. `[writable]` tuna_position
360                ///   4. `[writable]` tuna_position_ata_a
361                ///   5. `[writable]` tuna_position_ata_b
362#[derive(Clone, Debug)]
363pub struct ResetTunaSpotPositionCpiBuilder<'a, 'b> {
364  instruction: Box<ResetTunaSpotPositionCpiBuilderInstruction<'a, 'b>>,
365}
366
367impl<'a, 'b> ResetTunaSpotPositionCpiBuilder<'a, 'b> {
368  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
369    let instruction = Box::new(ResetTunaSpotPositionCpiBuilderInstruction {
370      __program: program,
371              authority: None,
372              mint_a: None,
373              mint_b: None,
374              tuna_position: None,
375              tuna_position_ata_a: None,
376              tuna_position_ata_b: None,
377                                            position_token: None,
378                                collateral_token: None,
379                    __remaining_accounts: Vec::new(),
380    });
381    Self { instruction }
382  }
383      #[inline(always)]
384    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
385                        self.instruction.authority = Some(authority);
386                    self
387    }
388      #[inline(always)]
389    pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
390                        self.instruction.mint_a = Some(mint_a);
391                    self
392    }
393      #[inline(always)]
394    pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
395                        self.instruction.mint_b = Some(mint_b);
396                    self
397    }
398      #[inline(always)]
399    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
400                        self.instruction.tuna_position = Some(tuna_position);
401                    self
402    }
403      #[inline(always)]
404    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
405                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
406                    self
407    }
408      #[inline(always)]
409    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
410                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
411                    self
412    }
413                    #[inline(always)]
414      pub fn position_token(&mut self, position_token: PoolToken) -> &mut Self {
415        self.instruction.position_token = Some(position_token);
416        self
417      }
418                #[inline(always)]
419      pub fn collateral_token(&mut self, collateral_token: PoolToken) -> &mut Self {
420        self.instruction.collateral_token = Some(collateral_token);
421        self
422      }
423        /// Add an additional account to the instruction.
424  #[inline(always)]
425  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
426    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
427    self
428  }
429  /// Add additional accounts to the instruction.
430  ///
431  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
432  /// and a `bool` indicating whether the account is a signer or not.
433  #[inline(always)]
434  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
435    self.instruction.__remaining_accounts.extend_from_slice(accounts);
436    self
437  }
438  #[inline(always)]
439  pub fn invoke(&self) -> solana_program_error::ProgramResult {
440    self.invoke_signed(&[])
441  }
442  #[allow(clippy::clone_on_copy)]
443  #[allow(clippy::vec_init_then_push)]
444  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
445          let args = ResetTunaSpotPositionInstructionArgs {
446                                                              position_token: self.instruction.position_token.clone().expect("position_token is not set"),
447                                                                  collateral_token: self.instruction.collateral_token.clone().expect("collateral_token is not set"),
448                                    };
449        let instruction = ResetTunaSpotPositionCpi {
450        __program: self.instruction.__program,
451                  
452          authority: self.instruction.authority.expect("authority is not set"),
453                  
454          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
455                  
456          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
457                  
458          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
459                  
460          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
461                  
462          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
463                          __args: args,
464            };
465    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
466  }
467}
468
469#[derive(Clone, Debug)]
470struct ResetTunaSpotPositionCpiBuilderInstruction<'a, 'b> {
471  __program: &'b solana_account_info::AccountInfo<'a>,
472            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
473                mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
474                mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
475                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
476                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
477                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
478                        position_token: Option<PoolToken>,
479                collateral_token: Option<PoolToken>,
480        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
481  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
482}
483