Skip to main content

defituna_client/generated/instructions/
repay_tuna_lp_position_debt.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 REPAY_TUNA_LP_POSITION_DEBT_DISCRIMINATOR: [u8; 8] = [79, 200, 30, 15, 252, 22, 162, 8];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct RepayTunaLpPositionDebt {
16            /// 
17/// TUNA accounts
18/// 
19
20    
21              
22          pub authority: solana_pubkey::Pubkey,
23          
24              
25          pub mint_a: solana_pubkey::Pubkey,
26          
27              
28          pub mint_b: solana_pubkey::Pubkey,
29          
30              
31          pub market: solana_pubkey::Pubkey,
32          
33              
34          pub vault_a: solana_pubkey::Pubkey,
35          
36              
37          pub vault_b: solana_pubkey::Pubkey,
38          
39              
40          pub vault_a_ata: solana_pubkey::Pubkey,
41          
42              
43          pub vault_b_ata: solana_pubkey::Pubkey,
44          
45              
46          pub tuna_position: solana_pubkey::Pubkey,
47          
48              
49          pub tuna_position_ata_a: solana_pubkey::Pubkey,
50          
51              
52          pub tuna_position_ata_b: solana_pubkey::Pubkey,
53          
54              
55          pub tuna_position_owner_ata_a: solana_pubkey::Pubkey,
56          
57              
58          pub tuna_position_owner_ata_b: solana_pubkey::Pubkey,
59                /// 
60/// Other accounts
61/// 
62
63    
64              
65          pub token_program_a: solana_pubkey::Pubkey,
66          
67              
68          pub token_program_b: solana_pubkey::Pubkey,
69          
70              
71          pub memo_program: solana_pubkey::Pubkey,
72          
73              
74          pub system_program: solana_pubkey::Pubkey,
75      }
76
77impl RepayTunaLpPositionDebt {
78  pub fn instruction(&self, args: RepayTunaLpPositionDebtInstructionArgs) -> solana_instruction::Instruction {
79    self.instruction_with_remaining_accounts(args, &[])
80  }
81  #[allow(clippy::arithmetic_side_effects)]
82  #[allow(clippy::vec_init_then_push)]
83  pub fn instruction_with_remaining_accounts(&self, args: RepayTunaLpPositionDebtInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
84    let mut accounts = Vec::with_capacity(17+ remaining_accounts.len());
85                            accounts.push(solana_instruction::AccountMeta::new(
86            self.authority,
87            true
88          ));
89                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
90            self.mint_a,
91            false
92          ));
93                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
94            self.mint_b,
95            false
96          ));
97                                          accounts.push(solana_instruction::AccountMeta::new(
98            self.market,
99            false
100          ));
101                                          accounts.push(solana_instruction::AccountMeta::new(
102            self.vault_a,
103            false
104          ));
105                                          accounts.push(solana_instruction::AccountMeta::new(
106            self.vault_b,
107            false
108          ));
109                                          accounts.push(solana_instruction::AccountMeta::new(
110            self.vault_a_ata,
111            false
112          ));
113                                          accounts.push(solana_instruction::AccountMeta::new(
114            self.vault_b_ata,
115            false
116          ));
117                                          accounts.push(solana_instruction::AccountMeta::new(
118            self.tuna_position,
119            false
120          ));
121                                          accounts.push(solana_instruction::AccountMeta::new(
122            self.tuna_position_ata_a,
123            false
124          ));
125                                          accounts.push(solana_instruction::AccountMeta::new(
126            self.tuna_position_ata_b,
127            false
128          ));
129                                          accounts.push(solana_instruction::AccountMeta::new(
130            self.tuna_position_owner_ata_a,
131            false
132          ));
133                                          accounts.push(solana_instruction::AccountMeta::new(
134            self.tuna_position_owner_ata_b,
135            false
136          ));
137                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
138            self.token_program_a,
139            false
140          ));
141                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
142            self.token_program_b,
143            false
144          ));
145                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
146            self.memo_program,
147            false
148          ));
149                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
150            self.system_program,
151            false
152          ));
153                      accounts.extend_from_slice(remaining_accounts);
154    let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
155          let mut args = borsh::to_vec(&args).unwrap();
156      data.append(&mut args);
157    
158    solana_instruction::Instruction {
159      program_id: crate::TUNA_ID,
160      accounts,
161      data,
162    }
163  }
164}
165
166#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
167#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
168 pub struct RepayTunaLpPositionDebtInstructionData {
169            discriminator: [u8; 8],
170                  }
171
172impl RepayTunaLpPositionDebtInstructionData {
173  pub fn new() -> Self {
174    Self {
175                        discriminator: [79, 200, 30, 15, 252, 22, 162, 8],
176                                              }
177  }
178}
179
180impl Default for RepayTunaLpPositionDebtInstructionData {
181  fn default() -> Self {
182    Self::new()
183  }
184}
185
186#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
187#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
188 pub struct RepayTunaLpPositionDebtInstructionArgs {
189                  pub collateral_funds_a: u64,
190                pub collateral_funds_b: u64,
191      }
192
193
194/// Instruction builder for `RepayTunaLpPositionDebt`.
195///
196/// ### Accounts:
197///
198                      ///   0. `[writable, signer]` authority
199          ///   1. `[]` mint_a
200          ///   2. `[]` mint_b
201                ///   3. `[writable]` market
202                ///   4. `[writable]` vault_a
203                ///   5. `[writable]` vault_b
204                ///   6. `[writable]` vault_a_ata
205                ///   7. `[writable]` vault_b_ata
206                ///   8. `[writable]` tuna_position
207                ///   9. `[writable]` tuna_position_ata_a
208                ///   10. `[writable]` tuna_position_ata_b
209                ///   11. `[writable]` tuna_position_owner_ata_a
210                ///   12. `[writable]` tuna_position_owner_ata_b
211          ///   13. `[]` token_program_a
212          ///   14. `[]` token_program_b
213          ///   15. `[]` memo_program
214                ///   16. `[optional]` system_program (default to `11111111111111111111111111111111`)
215#[derive(Clone, Debug, Default)]
216pub struct RepayTunaLpPositionDebtBuilder {
217            authority: Option<solana_pubkey::Pubkey>,
218                mint_a: Option<solana_pubkey::Pubkey>,
219                mint_b: Option<solana_pubkey::Pubkey>,
220                market: Option<solana_pubkey::Pubkey>,
221                vault_a: Option<solana_pubkey::Pubkey>,
222                vault_b: Option<solana_pubkey::Pubkey>,
223                vault_a_ata: Option<solana_pubkey::Pubkey>,
224                vault_b_ata: Option<solana_pubkey::Pubkey>,
225                tuna_position: Option<solana_pubkey::Pubkey>,
226                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
227                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
228                tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
229                tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
230                token_program_a: Option<solana_pubkey::Pubkey>,
231                token_program_b: Option<solana_pubkey::Pubkey>,
232                memo_program: Option<solana_pubkey::Pubkey>,
233                system_program: Option<solana_pubkey::Pubkey>,
234                        collateral_funds_a: Option<u64>,
235                collateral_funds_b: Option<u64>,
236        __remaining_accounts: Vec<solana_instruction::AccountMeta>,
237}
238
239impl RepayTunaLpPositionDebtBuilder {
240  pub fn new() -> Self {
241    Self::default()
242  }
243            /// 
244/// TUNA accounts
245/// 
246#[inline(always)]
247    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
248                        self.authority = Some(authority);
249                    self
250    }
251            #[inline(always)]
252    pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
253                        self.mint_a = Some(mint_a);
254                    self
255    }
256            #[inline(always)]
257    pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
258                        self.mint_b = Some(mint_b);
259                    self
260    }
261            #[inline(always)]
262    pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
263                        self.market = Some(market);
264                    self
265    }
266            #[inline(always)]
267    pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
268                        self.vault_a = Some(vault_a);
269                    self
270    }
271            #[inline(always)]
272    pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
273                        self.vault_b = Some(vault_b);
274                    self
275    }
276            #[inline(always)]
277    pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
278                        self.vault_a_ata = Some(vault_a_ata);
279                    self
280    }
281            #[inline(always)]
282    pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
283                        self.vault_b_ata = Some(vault_b_ata);
284                    self
285    }
286            #[inline(always)]
287    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
288                        self.tuna_position = Some(tuna_position);
289                    self
290    }
291            #[inline(always)]
292    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
293                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
294                    self
295    }
296            #[inline(always)]
297    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
298                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
299                    self
300    }
301            #[inline(always)]
302    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_pubkey::Pubkey) -> &mut Self {
303                        self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
304                    self
305    }
306            #[inline(always)]
307    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_pubkey::Pubkey) -> &mut Self {
308                        self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
309                    self
310    }
311            /// 
312/// Other accounts
313/// 
314#[inline(always)]
315    pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
316                        self.token_program_a = Some(token_program_a);
317                    self
318    }
319            #[inline(always)]
320    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
321                        self.token_program_b = Some(token_program_b);
322                    self
323    }
324            #[inline(always)]
325    pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
326                        self.memo_program = Some(memo_program);
327                    self
328    }
329            /// `[optional account, default to '11111111111111111111111111111111']`
330#[inline(always)]
331    pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
332                        self.system_program = Some(system_program);
333                    self
334    }
335                    #[inline(always)]
336      pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
337        self.collateral_funds_a = Some(collateral_funds_a);
338        self
339      }
340                #[inline(always)]
341      pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
342        self.collateral_funds_b = Some(collateral_funds_b);
343        self
344      }
345        /// Add an additional account to the instruction.
346  #[inline(always)]
347  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
348    self.__remaining_accounts.push(account);
349    self
350  }
351  /// Add additional accounts to the instruction.
352  #[inline(always)]
353  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
354    self.__remaining_accounts.extend_from_slice(accounts);
355    self
356  }
357  #[allow(clippy::clone_on_copy)]
358  pub fn instruction(&self) -> solana_instruction::Instruction {
359    let accounts = RepayTunaLpPositionDebt {
360                              authority: self.authority.expect("authority is not set"),
361                                        mint_a: self.mint_a.expect("mint_a is not set"),
362                                        mint_b: self.mint_b.expect("mint_b is not set"),
363                                        market: self.market.expect("market is not set"),
364                                        vault_a: self.vault_a.expect("vault_a is not set"),
365                                        vault_b: self.vault_b.expect("vault_b is not set"),
366                                        vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
367                                        vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
368                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
369                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
370                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
371                                        tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
372                                        tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
373                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
374                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
375                                        memo_program: self.memo_program.expect("memo_program is not set"),
376                                        system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
377                      };
378          let args = RepayTunaLpPositionDebtInstructionArgs {
379                                                              collateral_funds_a: self.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
380                                                                  collateral_funds_b: self.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
381                                    };
382    
383    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
384  }
385}
386
387  /// `repay_tuna_lp_position_debt` CPI accounts.
388  pub struct RepayTunaLpPositionDebtCpiAccounts<'a, 'b> {
389                  /// 
390/// TUNA accounts
391/// 
392
393      
394                    
395              pub authority: &'b solana_account_info::AccountInfo<'a>,
396                
397                    
398              pub mint_a: &'b solana_account_info::AccountInfo<'a>,
399                
400                    
401              pub mint_b: &'b solana_account_info::AccountInfo<'a>,
402                
403                    
404              pub market: &'b solana_account_info::AccountInfo<'a>,
405                
406                    
407              pub vault_a: &'b solana_account_info::AccountInfo<'a>,
408                
409                    
410              pub vault_b: &'b solana_account_info::AccountInfo<'a>,
411                
412                    
413              pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
414                
415                    
416              pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
417                
418                    
419              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
420                
421                    
422              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
423                
424                    
425              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
426                
427                    
428              pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
429                
430                    
431              pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
432                        /// 
433/// Other accounts
434/// 
435
436      
437                    
438              pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
439                
440                    
441              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
442                
443                    
444              pub memo_program: &'b solana_account_info::AccountInfo<'a>,
445                
446                    
447              pub system_program: &'b solana_account_info::AccountInfo<'a>,
448            }
449
450/// `repay_tuna_lp_position_debt` CPI instruction.
451pub struct RepayTunaLpPositionDebtCpi<'a, 'b> {
452  /// The program to invoke.
453  pub __program: &'b solana_account_info::AccountInfo<'a>,
454            /// 
455/// TUNA accounts
456/// 
457
458    
459              
460          pub authority: &'b solana_account_info::AccountInfo<'a>,
461          
462              
463          pub mint_a: &'b solana_account_info::AccountInfo<'a>,
464          
465              
466          pub mint_b: &'b solana_account_info::AccountInfo<'a>,
467          
468              
469          pub market: &'b solana_account_info::AccountInfo<'a>,
470          
471              
472          pub vault_a: &'b solana_account_info::AccountInfo<'a>,
473          
474              
475          pub vault_b: &'b solana_account_info::AccountInfo<'a>,
476          
477              
478          pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
479          
480              
481          pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
482          
483              
484          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
485          
486              
487          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
488          
489              
490          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
491          
492              
493          pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
494          
495              
496          pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
497                /// 
498/// Other accounts
499/// 
500
501    
502              
503          pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
504          
505              
506          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
507          
508              
509          pub memo_program: &'b solana_account_info::AccountInfo<'a>,
510          
511              
512          pub system_program: &'b solana_account_info::AccountInfo<'a>,
513            /// The arguments for the instruction.
514    pub __args: RepayTunaLpPositionDebtInstructionArgs,
515  }
516
517impl<'a, 'b> RepayTunaLpPositionDebtCpi<'a, 'b> {
518  pub fn new(
519    program: &'b solana_account_info::AccountInfo<'a>,
520          accounts: RepayTunaLpPositionDebtCpiAccounts<'a, 'b>,
521              args: RepayTunaLpPositionDebtInstructionArgs,
522      ) -> Self {
523    Self {
524      __program: program,
525              authority: accounts.authority,
526              mint_a: accounts.mint_a,
527              mint_b: accounts.mint_b,
528              market: accounts.market,
529              vault_a: accounts.vault_a,
530              vault_b: accounts.vault_b,
531              vault_a_ata: accounts.vault_a_ata,
532              vault_b_ata: accounts.vault_b_ata,
533              tuna_position: accounts.tuna_position,
534              tuna_position_ata_a: accounts.tuna_position_ata_a,
535              tuna_position_ata_b: accounts.tuna_position_ata_b,
536              tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
537              tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
538              token_program_a: accounts.token_program_a,
539              token_program_b: accounts.token_program_b,
540              memo_program: accounts.memo_program,
541              system_program: accounts.system_program,
542                    __args: args,
543          }
544  }
545  #[inline(always)]
546  pub fn invoke(&self) -> solana_program_error::ProgramResult {
547    self.invoke_signed_with_remaining_accounts(&[], &[])
548  }
549  #[inline(always)]
550  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
551    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
552  }
553  #[inline(always)]
554  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
555    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
556  }
557  #[allow(clippy::arithmetic_side_effects)]
558  #[allow(clippy::clone_on_copy)]
559  #[allow(clippy::vec_init_then_push)]
560  pub fn invoke_signed_with_remaining_accounts(
561    &self,
562    signers_seeds: &[&[&[u8]]],
563    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
564  ) -> solana_program_error::ProgramResult {
565    let mut accounts = Vec::with_capacity(17+ remaining_accounts.len());
566                            accounts.push(solana_instruction::AccountMeta::new(
567            *self.authority.key,
568            true
569          ));
570                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
571            *self.mint_a.key,
572            false
573          ));
574                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
575            *self.mint_b.key,
576            false
577          ));
578                                          accounts.push(solana_instruction::AccountMeta::new(
579            *self.market.key,
580            false
581          ));
582                                          accounts.push(solana_instruction::AccountMeta::new(
583            *self.vault_a.key,
584            false
585          ));
586                                          accounts.push(solana_instruction::AccountMeta::new(
587            *self.vault_b.key,
588            false
589          ));
590                                          accounts.push(solana_instruction::AccountMeta::new(
591            *self.vault_a_ata.key,
592            false
593          ));
594                                          accounts.push(solana_instruction::AccountMeta::new(
595            *self.vault_b_ata.key,
596            false
597          ));
598                                          accounts.push(solana_instruction::AccountMeta::new(
599            *self.tuna_position.key,
600            false
601          ));
602                                          accounts.push(solana_instruction::AccountMeta::new(
603            *self.tuna_position_ata_a.key,
604            false
605          ));
606                                          accounts.push(solana_instruction::AccountMeta::new(
607            *self.tuna_position_ata_b.key,
608            false
609          ));
610                                          accounts.push(solana_instruction::AccountMeta::new(
611            *self.tuna_position_owner_ata_a.key,
612            false
613          ));
614                                          accounts.push(solana_instruction::AccountMeta::new(
615            *self.tuna_position_owner_ata_b.key,
616            false
617          ));
618                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
619            *self.token_program_a.key,
620            false
621          ));
622                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
623            *self.token_program_b.key,
624            false
625          ));
626                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
627            *self.memo_program.key,
628            false
629          ));
630                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
631            *self.system_program.key,
632            false
633          ));
634                      remaining_accounts.iter().for_each(|remaining_account| {
635      accounts.push(solana_instruction::AccountMeta {
636          pubkey: *remaining_account.0.key,
637          is_signer: remaining_account.1,
638          is_writable: remaining_account.2,
639      })
640    });
641    let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
642          let mut args = borsh::to_vec(&self.__args).unwrap();
643      data.append(&mut args);
644    
645    let instruction = solana_instruction::Instruction {
646      program_id: crate::TUNA_ID,
647      accounts,
648      data,
649    };
650    let mut account_infos = Vec::with_capacity(18 + remaining_accounts.len());
651    account_infos.push(self.__program.clone());
652                  account_infos.push(self.authority.clone());
653                        account_infos.push(self.mint_a.clone());
654                        account_infos.push(self.mint_b.clone());
655                        account_infos.push(self.market.clone());
656                        account_infos.push(self.vault_a.clone());
657                        account_infos.push(self.vault_b.clone());
658                        account_infos.push(self.vault_a_ata.clone());
659                        account_infos.push(self.vault_b_ata.clone());
660                        account_infos.push(self.tuna_position.clone());
661                        account_infos.push(self.tuna_position_ata_a.clone());
662                        account_infos.push(self.tuna_position_ata_b.clone());
663                        account_infos.push(self.tuna_position_owner_ata_a.clone());
664                        account_infos.push(self.tuna_position_owner_ata_b.clone());
665                        account_infos.push(self.token_program_a.clone());
666                        account_infos.push(self.token_program_b.clone());
667                        account_infos.push(self.memo_program.clone());
668                        account_infos.push(self.system_program.clone());
669              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
670
671    if signers_seeds.is_empty() {
672      solana_cpi::invoke(&instruction, &account_infos)
673    } else {
674      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
675    }
676  }
677}
678
679/// Instruction builder for `RepayTunaLpPositionDebt` via CPI.
680///
681/// ### Accounts:
682///
683                      ///   0. `[writable, signer]` authority
684          ///   1. `[]` mint_a
685          ///   2. `[]` mint_b
686                ///   3. `[writable]` market
687                ///   4. `[writable]` vault_a
688                ///   5. `[writable]` vault_b
689                ///   6. `[writable]` vault_a_ata
690                ///   7. `[writable]` vault_b_ata
691                ///   8. `[writable]` tuna_position
692                ///   9. `[writable]` tuna_position_ata_a
693                ///   10. `[writable]` tuna_position_ata_b
694                ///   11. `[writable]` tuna_position_owner_ata_a
695                ///   12. `[writable]` tuna_position_owner_ata_b
696          ///   13. `[]` token_program_a
697          ///   14. `[]` token_program_b
698          ///   15. `[]` memo_program
699          ///   16. `[]` system_program
700#[derive(Clone, Debug)]
701pub struct RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
702  instruction: Box<RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b>>,
703}
704
705impl<'a, 'b> RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
706  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
707    let instruction = Box::new(RepayTunaLpPositionDebtCpiBuilderInstruction {
708      __program: program,
709              authority: None,
710              mint_a: None,
711              mint_b: None,
712              market: None,
713              vault_a: None,
714              vault_b: None,
715              vault_a_ata: None,
716              vault_b_ata: None,
717              tuna_position: None,
718              tuna_position_ata_a: None,
719              tuna_position_ata_b: None,
720              tuna_position_owner_ata_a: None,
721              tuna_position_owner_ata_b: None,
722              token_program_a: None,
723              token_program_b: None,
724              memo_program: None,
725              system_program: None,
726                                            collateral_funds_a: None,
727                                collateral_funds_b: None,
728                    __remaining_accounts: Vec::new(),
729    });
730    Self { instruction }
731  }
732      /// 
733/// TUNA accounts
734/// 
735#[inline(always)]
736    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
737                        self.instruction.authority = Some(authority);
738                    self
739    }
740      #[inline(always)]
741    pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
742                        self.instruction.mint_a = Some(mint_a);
743                    self
744    }
745      #[inline(always)]
746    pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
747                        self.instruction.mint_b = Some(mint_b);
748                    self
749    }
750      #[inline(always)]
751    pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
752                        self.instruction.market = Some(market);
753                    self
754    }
755      #[inline(always)]
756    pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
757                        self.instruction.vault_a = Some(vault_a);
758                    self
759    }
760      #[inline(always)]
761    pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
762                        self.instruction.vault_b = Some(vault_b);
763                    self
764    }
765      #[inline(always)]
766    pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
767                        self.instruction.vault_a_ata = Some(vault_a_ata);
768                    self
769    }
770      #[inline(always)]
771    pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
772                        self.instruction.vault_b_ata = Some(vault_b_ata);
773                    self
774    }
775      #[inline(always)]
776    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
777                        self.instruction.tuna_position = Some(tuna_position);
778                    self
779    }
780      #[inline(always)]
781    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
782                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
783                    self
784    }
785      #[inline(always)]
786    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
787                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
788                    self
789    }
790      #[inline(always)]
791    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
792                        self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
793                    self
794    }
795      #[inline(always)]
796    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
797                        self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
798                    self
799    }
800      /// 
801/// Other accounts
802/// 
803#[inline(always)]
804    pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
805                        self.instruction.token_program_a = Some(token_program_a);
806                    self
807    }
808      #[inline(always)]
809    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
810                        self.instruction.token_program_b = Some(token_program_b);
811                    self
812    }
813      #[inline(always)]
814    pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
815                        self.instruction.memo_program = Some(memo_program);
816                    self
817    }
818      #[inline(always)]
819    pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
820                        self.instruction.system_program = Some(system_program);
821                    self
822    }
823                    #[inline(always)]
824      pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
825        self.instruction.collateral_funds_a = Some(collateral_funds_a);
826        self
827      }
828                #[inline(always)]
829      pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
830        self.instruction.collateral_funds_b = Some(collateral_funds_b);
831        self
832      }
833        /// Add an additional account to the instruction.
834  #[inline(always)]
835  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
836    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
837    self
838  }
839  /// Add additional accounts to the instruction.
840  ///
841  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
842  /// and a `bool` indicating whether the account is a signer or not.
843  #[inline(always)]
844  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
845    self.instruction.__remaining_accounts.extend_from_slice(accounts);
846    self
847  }
848  #[inline(always)]
849  pub fn invoke(&self) -> solana_program_error::ProgramResult {
850    self.invoke_signed(&[])
851  }
852  #[allow(clippy::clone_on_copy)]
853  #[allow(clippy::vec_init_then_push)]
854  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
855          let args = RepayTunaLpPositionDebtInstructionArgs {
856                                                              collateral_funds_a: self.instruction.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
857                                                                  collateral_funds_b: self.instruction.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
858                                    };
859        let instruction = RepayTunaLpPositionDebtCpi {
860        __program: self.instruction.__program,
861                  
862          authority: self.instruction.authority.expect("authority is not set"),
863                  
864          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
865                  
866          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
867                  
868          market: self.instruction.market.expect("market is not set"),
869                  
870          vault_a: self.instruction.vault_a.expect("vault_a is not set"),
871                  
872          vault_b: self.instruction.vault_b.expect("vault_b is not set"),
873                  
874          vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
875                  
876          vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
877                  
878          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
879                  
880          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
881                  
882          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
883                  
884          tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
885                  
886          tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
887                  
888          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
889                  
890          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
891                  
892          memo_program: self.instruction.memo_program.expect("memo_program is not set"),
893                  
894          system_program: self.instruction.system_program.expect("system_program is not set"),
895                          __args: args,
896            };
897    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
898  }
899}
900
901#[derive(Clone, Debug)]
902struct RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b> {
903  __program: &'b solana_account_info::AccountInfo<'a>,
904            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
905                mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
906                mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
907                market: Option<&'b solana_account_info::AccountInfo<'a>>,
908                vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
909                vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
910                vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
911                vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
912                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
913                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
914                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
915                tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
916                tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
917                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
918                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
919                memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
920                system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
921                        collateral_funds_a: Option<u64>,
922                collateral_funds_b: Option<u64>,
923        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
924  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
925}
926