Skip to main content

defituna_client/generated/instructions/
liquidate_tuna_spot_position_jupiter.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::RemainingAccountsInfo;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12pub const LIQUIDATE_TUNA_SPOT_POSITION_JUPITER_DISCRIMINATOR: [u8; 8] = [202, 175, 176, 66, 139, 120, 175, 193];
13
14/// Accounts.
15#[derive(Debug)]
16pub struct LiquidateTunaSpotPositionJupiter {
17            /// 
18/// TUNA accounts
19/// 
20
21    
22              
23          pub authority: solana_pubkey::Pubkey,
24          
25              
26          pub tuna_config: solana_pubkey::Pubkey,
27          
28              
29          pub mint_a: solana_pubkey::Pubkey,
30          
31              
32          pub mint_b: solana_pubkey::Pubkey,
33          
34              
35          pub token_program_a: solana_pubkey::Pubkey,
36          
37              
38          pub token_program_b: solana_pubkey::Pubkey,
39          
40              
41          pub market: solana_pubkey::Pubkey,
42          
43              
44          pub vault_a: solana_pubkey::Pubkey,
45          
46              
47          pub vault_b: solana_pubkey::Pubkey,
48          
49              
50          pub vault_a_ata: solana_pubkey::Pubkey,
51          
52              
53          pub vault_b_ata: solana_pubkey::Pubkey,
54          
55              
56          pub tuna_position: solana_pubkey::Pubkey,
57          
58              
59          pub tuna_position_ata_a: solana_pubkey::Pubkey,
60          
61              
62          pub tuna_position_ata_b: solana_pubkey::Pubkey,
63          
64              
65          pub fee_recipient_ata_a: solana_pubkey::Pubkey,
66          
67              
68          pub fee_recipient_ata_b: solana_pubkey::Pubkey,
69          
70              
71          pub tuna_position_owner: solana_pubkey::Pubkey,
72          
73              
74          pub tuna_position_owner_ata_a: solana_pubkey::Pubkey,
75          
76              
77          pub tuna_position_owner_ata_b: solana_pubkey::Pubkey,
78          
79              
80          pub oracle_price_update_a: solana_pubkey::Pubkey,
81          
82              
83          pub oracle_price_update_b: solana_pubkey::Pubkey,
84          
85              
86          pub pool: solana_pubkey::Pubkey,
87                /// 
88/// Jupiter accounts
89/// 
90
91    
92              
93          pub jupiter_program: solana_pubkey::Pubkey,
94                /// 
95/// Other accounts
96/// 
97
98    
99              
100          pub memo_program: solana_pubkey::Pubkey,
101          
102              
103          pub system_program: solana_pubkey::Pubkey,
104      }
105
106impl LiquidateTunaSpotPositionJupiter {
107  pub fn instruction(&self, args: LiquidateTunaSpotPositionJupiterInstructionArgs) -> solana_instruction::Instruction {
108    self.instruction_with_remaining_accounts(args, &[])
109  }
110  #[allow(clippy::arithmetic_side_effects)]
111  #[allow(clippy::vec_init_then_push)]
112  pub fn instruction_with_remaining_accounts(&self, args: LiquidateTunaSpotPositionJupiterInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
113    let mut accounts = Vec::with_capacity(25+ remaining_accounts.len());
114                            accounts.push(solana_instruction::AccountMeta::new(
115            self.authority,
116            true
117          ));
118                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
119            self.tuna_config,
120            false
121          ));
122                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
123            self.mint_a,
124            false
125          ));
126                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
127            self.mint_b,
128            false
129          ));
130                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
131            self.token_program_a,
132            false
133          ));
134                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
135            self.token_program_b,
136            false
137          ));
138                                          accounts.push(solana_instruction::AccountMeta::new(
139            self.market,
140            false
141          ));
142                                          accounts.push(solana_instruction::AccountMeta::new(
143            self.vault_a,
144            false
145          ));
146                                          accounts.push(solana_instruction::AccountMeta::new(
147            self.vault_b,
148            false
149          ));
150                                          accounts.push(solana_instruction::AccountMeta::new(
151            self.vault_a_ata,
152            false
153          ));
154                                          accounts.push(solana_instruction::AccountMeta::new(
155            self.vault_b_ata,
156            false
157          ));
158                                          accounts.push(solana_instruction::AccountMeta::new(
159            self.tuna_position,
160            false
161          ));
162                                          accounts.push(solana_instruction::AccountMeta::new(
163            self.tuna_position_ata_a,
164            false
165          ));
166                                          accounts.push(solana_instruction::AccountMeta::new(
167            self.tuna_position_ata_b,
168            false
169          ));
170                                          accounts.push(solana_instruction::AccountMeta::new(
171            self.fee_recipient_ata_a,
172            false
173          ));
174                                          accounts.push(solana_instruction::AccountMeta::new(
175            self.fee_recipient_ata_b,
176            false
177          ));
178                                          accounts.push(solana_instruction::AccountMeta::new(
179            self.tuna_position_owner,
180            false
181          ));
182                                          accounts.push(solana_instruction::AccountMeta::new(
183            self.tuna_position_owner_ata_a,
184            false
185          ));
186                                          accounts.push(solana_instruction::AccountMeta::new(
187            self.tuna_position_owner_ata_b,
188            false
189          ));
190                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
191            self.oracle_price_update_a,
192            false
193          ));
194                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
195            self.oracle_price_update_b,
196            false
197          ));
198                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
199            self.pool,
200            false
201          ));
202                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
203            self.jupiter_program,
204            false
205          ));
206                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
207            self.memo_program,
208            false
209          ));
210                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
211            self.system_program,
212            false
213          ));
214                      accounts.extend_from_slice(remaining_accounts);
215    let mut data = borsh::to_vec(&LiquidateTunaSpotPositionJupiterInstructionData::new()).unwrap();
216          let mut args = borsh::to_vec(&args).unwrap();
217      data.append(&mut args);
218    
219    solana_instruction::Instruction {
220      program_id: crate::TUNA_ID,
221      accounts,
222      data,
223    }
224  }
225}
226
227#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
228#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
229 pub struct LiquidateTunaSpotPositionJupiterInstructionData {
230            discriminator: [u8; 8],
231                        }
232
233impl LiquidateTunaSpotPositionJupiterInstructionData {
234  pub fn new() -> Self {
235    Self {
236                        discriminator: [202, 175, 176, 66, 139, 120, 175, 193],
237                                                            }
238  }
239}
240
241impl Default for LiquidateTunaSpotPositionJupiterInstructionData {
242  fn default() -> Self {
243    Self::new()
244  }
245}
246
247#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
248#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
249 pub struct LiquidateTunaSpotPositionJupiterInstructionArgs {
250                  pub decrease_percent: u32,
251                pub jupiter_route_data: Vec<u8>,
252                pub remaining_accounts_info: RemainingAccountsInfo,
253      }
254
255
256/// Instruction builder for `LiquidateTunaSpotPositionJupiter`.
257///
258/// ### Accounts:
259///
260                      ///   0. `[writable, signer]` authority
261          ///   1. `[]` tuna_config
262          ///   2. `[]` mint_a
263          ///   3. `[]` mint_b
264          ///   4. `[]` token_program_a
265          ///   5. `[]` token_program_b
266                ///   6. `[writable]` market
267                ///   7. `[writable]` vault_a
268                ///   8. `[writable]` vault_b
269                ///   9. `[writable]` vault_a_ata
270                ///   10. `[writable]` vault_b_ata
271                ///   11. `[writable]` tuna_position
272                ///   12. `[writable]` tuna_position_ata_a
273                ///   13. `[writable]` tuna_position_ata_b
274                ///   14. `[writable]` fee_recipient_ata_a
275                ///   15. `[writable]` fee_recipient_ata_b
276                ///   16. `[writable]` tuna_position_owner
277                ///   17. `[writable]` tuna_position_owner_ata_a
278                ///   18. `[writable]` tuna_position_owner_ata_b
279          ///   19. `[]` oracle_price_update_a
280          ///   20. `[]` oracle_price_update_b
281          ///   21. `[]` pool
282          ///   22. `[]` jupiter_program
283          ///   23. `[]` memo_program
284                ///   24. `[optional]` system_program (default to `11111111111111111111111111111111`)
285#[derive(Clone, Debug, Default)]
286pub struct LiquidateTunaSpotPositionJupiterBuilder {
287            authority: Option<solana_pubkey::Pubkey>,
288                tuna_config: Option<solana_pubkey::Pubkey>,
289                mint_a: Option<solana_pubkey::Pubkey>,
290                mint_b: Option<solana_pubkey::Pubkey>,
291                token_program_a: Option<solana_pubkey::Pubkey>,
292                token_program_b: Option<solana_pubkey::Pubkey>,
293                market: Option<solana_pubkey::Pubkey>,
294                vault_a: Option<solana_pubkey::Pubkey>,
295                vault_b: Option<solana_pubkey::Pubkey>,
296                vault_a_ata: Option<solana_pubkey::Pubkey>,
297                vault_b_ata: Option<solana_pubkey::Pubkey>,
298                tuna_position: Option<solana_pubkey::Pubkey>,
299                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
300                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
301                fee_recipient_ata_a: Option<solana_pubkey::Pubkey>,
302                fee_recipient_ata_b: Option<solana_pubkey::Pubkey>,
303                tuna_position_owner: Option<solana_pubkey::Pubkey>,
304                tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
305                tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
306                oracle_price_update_a: Option<solana_pubkey::Pubkey>,
307                oracle_price_update_b: Option<solana_pubkey::Pubkey>,
308                pool: Option<solana_pubkey::Pubkey>,
309                jupiter_program: Option<solana_pubkey::Pubkey>,
310                memo_program: Option<solana_pubkey::Pubkey>,
311                system_program: Option<solana_pubkey::Pubkey>,
312                        decrease_percent: Option<u32>,
313                jupiter_route_data: Option<Vec<u8>>,
314                remaining_accounts_info: Option<RemainingAccountsInfo>,
315        __remaining_accounts: Vec<solana_instruction::AccountMeta>,
316}
317
318impl LiquidateTunaSpotPositionJupiterBuilder {
319  pub fn new() -> Self {
320    Self::default()
321  }
322            /// 
323/// TUNA accounts
324/// 
325#[inline(always)]
326    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
327                        self.authority = Some(authority);
328                    self
329    }
330            #[inline(always)]
331    pub fn tuna_config(&mut self, tuna_config: solana_pubkey::Pubkey) -> &mut Self {
332                        self.tuna_config = Some(tuna_config);
333                    self
334    }
335            #[inline(always)]
336    pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
337                        self.mint_a = Some(mint_a);
338                    self
339    }
340            #[inline(always)]
341    pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
342                        self.mint_b = Some(mint_b);
343                    self
344    }
345            #[inline(always)]
346    pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
347                        self.token_program_a = Some(token_program_a);
348                    self
349    }
350            #[inline(always)]
351    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
352                        self.token_program_b = Some(token_program_b);
353                    self
354    }
355            #[inline(always)]
356    pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
357                        self.market = Some(market);
358                    self
359    }
360            #[inline(always)]
361    pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
362                        self.vault_a = Some(vault_a);
363                    self
364    }
365            #[inline(always)]
366    pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
367                        self.vault_b = Some(vault_b);
368                    self
369    }
370            #[inline(always)]
371    pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
372                        self.vault_a_ata = Some(vault_a_ata);
373                    self
374    }
375            #[inline(always)]
376    pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
377                        self.vault_b_ata = Some(vault_b_ata);
378                    self
379    }
380            #[inline(always)]
381    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
382                        self.tuna_position = Some(tuna_position);
383                    self
384    }
385            #[inline(always)]
386    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
387                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
388                    self
389    }
390            #[inline(always)]
391    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
392                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
393                    self
394    }
395            #[inline(always)]
396    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: solana_pubkey::Pubkey) -> &mut Self {
397                        self.fee_recipient_ata_a = Some(fee_recipient_ata_a);
398                    self
399    }
400            #[inline(always)]
401    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: solana_pubkey::Pubkey) -> &mut Self {
402                        self.fee_recipient_ata_b = Some(fee_recipient_ata_b);
403                    self
404    }
405            #[inline(always)]
406    pub fn tuna_position_owner(&mut self, tuna_position_owner: solana_pubkey::Pubkey) -> &mut Self {
407                        self.tuna_position_owner = Some(tuna_position_owner);
408                    self
409    }
410            #[inline(always)]
411    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_pubkey::Pubkey) -> &mut Self {
412                        self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
413                    self
414    }
415            #[inline(always)]
416    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_pubkey::Pubkey) -> &mut Self {
417                        self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
418                    self
419    }
420            #[inline(always)]
421    pub fn oracle_price_update_a(&mut self, oracle_price_update_a: solana_pubkey::Pubkey) -> &mut Self {
422                        self.oracle_price_update_a = Some(oracle_price_update_a);
423                    self
424    }
425            #[inline(always)]
426    pub fn oracle_price_update_b(&mut self, oracle_price_update_b: solana_pubkey::Pubkey) -> &mut Self {
427                        self.oracle_price_update_b = Some(oracle_price_update_b);
428                    self
429    }
430            #[inline(always)]
431    pub fn pool(&mut self, pool: solana_pubkey::Pubkey) -> &mut Self {
432                        self.pool = Some(pool);
433                    self
434    }
435            /// 
436/// Jupiter accounts
437/// 
438#[inline(always)]
439    pub fn jupiter_program(&mut self, jupiter_program: solana_pubkey::Pubkey) -> &mut Self {
440                        self.jupiter_program = Some(jupiter_program);
441                    self
442    }
443            /// 
444/// Other accounts
445/// 
446#[inline(always)]
447    pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
448                        self.memo_program = Some(memo_program);
449                    self
450    }
451            /// `[optional account, default to '11111111111111111111111111111111']`
452#[inline(always)]
453    pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
454                        self.system_program = Some(system_program);
455                    self
456    }
457                    #[inline(always)]
458      pub fn decrease_percent(&mut self, decrease_percent: u32) -> &mut Self {
459        self.decrease_percent = Some(decrease_percent);
460        self
461      }
462                #[inline(always)]
463      pub fn jupiter_route_data(&mut self, jupiter_route_data: Vec<u8>) -> &mut Self {
464        self.jupiter_route_data = Some(jupiter_route_data);
465        self
466      }
467                #[inline(always)]
468      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
469        self.remaining_accounts_info = Some(remaining_accounts_info);
470        self
471      }
472        /// Add an additional account to the instruction.
473  #[inline(always)]
474  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
475    self.__remaining_accounts.push(account);
476    self
477  }
478  /// Add additional accounts to the instruction.
479  #[inline(always)]
480  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
481    self.__remaining_accounts.extend_from_slice(accounts);
482    self
483  }
484  #[allow(clippy::clone_on_copy)]
485  pub fn instruction(&self) -> solana_instruction::Instruction {
486    let accounts = LiquidateTunaSpotPositionJupiter {
487                              authority: self.authority.expect("authority is not set"),
488                                        tuna_config: self.tuna_config.expect("tuna_config is not set"),
489                                        mint_a: self.mint_a.expect("mint_a is not set"),
490                                        mint_b: self.mint_b.expect("mint_b is not set"),
491                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
492                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
493                                        market: self.market.expect("market is not set"),
494                                        vault_a: self.vault_a.expect("vault_a is not set"),
495                                        vault_b: self.vault_b.expect("vault_b is not set"),
496                                        vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
497                                        vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
498                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
499                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
500                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
501                                        fee_recipient_ata_a: self.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
502                                        fee_recipient_ata_b: self.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
503                                        tuna_position_owner: self.tuna_position_owner.expect("tuna_position_owner is not set"),
504                                        tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
505                                        tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
506                                        oracle_price_update_a: self.oracle_price_update_a.expect("oracle_price_update_a is not set"),
507                                        oracle_price_update_b: self.oracle_price_update_b.expect("oracle_price_update_b is not set"),
508                                        pool: self.pool.expect("pool is not set"),
509                                        jupiter_program: self.jupiter_program.expect("jupiter_program is not set"),
510                                        memo_program: self.memo_program.expect("memo_program is not set"),
511                                        system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
512                      };
513          let args = LiquidateTunaSpotPositionJupiterInstructionArgs {
514                                                              decrease_percent: self.decrease_percent.clone().expect("decrease_percent is not set"),
515                                                                  jupiter_route_data: self.jupiter_route_data.clone().expect("jupiter_route_data is not set"),
516                                                                  remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
517                                    };
518    
519    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
520  }
521}
522
523  /// `liquidate_tuna_spot_position_jupiter` CPI accounts.
524  pub struct LiquidateTunaSpotPositionJupiterCpiAccounts<'a, 'b> {
525                  /// 
526/// TUNA accounts
527/// 
528
529      
530                    
531              pub authority: &'b solana_account_info::AccountInfo<'a>,
532                
533                    
534              pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
535                
536                    
537              pub mint_a: &'b solana_account_info::AccountInfo<'a>,
538                
539                    
540              pub mint_b: &'b solana_account_info::AccountInfo<'a>,
541                
542                    
543              pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
544                
545                    
546              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
547                
548                    
549              pub market: &'b solana_account_info::AccountInfo<'a>,
550                
551                    
552              pub vault_a: &'b solana_account_info::AccountInfo<'a>,
553                
554                    
555              pub vault_b: &'b solana_account_info::AccountInfo<'a>,
556                
557                    
558              pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
559                
560                    
561              pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
562                
563                    
564              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
565                
566                    
567              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
568                
569                    
570              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
571                
572                    
573              pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
574                
575                    
576              pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
577                
578                    
579              pub tuna_position_owner: &'b solana_account_info::AccountInfo<'a>,
580                
581                    
582              pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
583                
584                    
585              pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
586                
587                    
588              pub oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>,
589                
590                    
591              pub oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>,
592                
593                    
594              pub pool: &'b solana_account_info::AccountInfo<'a>,
595                        /// 
596/// Jupiter accounts
597/// 
598
599      
600                    
601              pub jupiter_program: &'b solana_account_info::AccountInfo<'a>,
602                        /// 
603/// Other accounts
604/// 
605
606      
607                    
608              pub memo_program: &'b solana_account_info::AccountInfo<'a>,
609                
610                    
611              pub system_program: &'b solana_account_info::AccountInfo<'a>,
612            }
613
614/// `liquidate_tuna_spot_position_jupiter` CPI instruction.
615pub struct LiquidateTunaSpotPositionJupiterCpi<'a, 'b> {
616  /// The program to invoke.
617  pub __program: &'b solana_account_info::AccountInfo<'a>,
618            /// 
619/// TUNA accounts
620/// 
621
622    
623              
624          pub authority: &'b solana_account_info::AccountInfo<'a>,
625          
626              
627          pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
628          
629              
630          pub mint_a: &'b solana_account_info::AccountInfo<'a>,
631          
632              
633          pub mint_b: &'b solana_account_info::AccountInfo<'a>,
634          
635              
636          pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
637          
638              
639          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
640          
641              
642          pub market: &'b solana_account_info::AccountInfo<'a>,
643          
644              
645          pub vault_a: &'b solana_account_info::AccountInfo<'a>,
646          
647              
648          pub vault_b: &'b solana_account_info::AccountInfo<'a>,
649          
650              
651          pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
652          
653              
654          pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
655          
656              
657          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
658          
659              
660          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
661          
662              
663          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
664          
665              
666          pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
667          
668              
669          pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
670          
671              
672          pub tuna_position_owner: &'b solana_account_info::AccountInfo<'a>,
673          
674              
675          pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
676          
677              
678          pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
679          
680              
681          pub oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>,
682          
683              
684          pub oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>,
685          
686              
687          pub pool: &'b solana_account_info::AccountInfo<'a>,
688                /// 
689/// Jupiter accounts
690/// 
691
692    
693              
694          pub jupiter_program: &'b solana_account_info::AccountInfo<'a>,
695                /// 
696/// Other accounts
697/// 
698
699    
700              
701          pub memo_program: &'b solana_account_info::AccountInfo<'a>,
702          
703              
704          pub system_program: &'b solana_account_info::AccountInfo<'a>,
705            /// The arguments for the instruction.
706    pub __args: LiquidateTunaSpotPositionJupiterInstructionArgs,
707  }
708
709impl<'a, 'b> LiquidateTunaSpotPositionJupiterCpi<'a, 'b> {
710  pub fn new(
711    program: &'b solana_account_info::AccountInfo<'a>,
712          accounts: LiquidateTunaSpotPositionJupiterCpiAccounts<'a, 'b>,
713              args: LiquidateTunaSpotPositionJupiterInstructionArgs,
714      ) -> Self {
715    Self {
716      __program: program,
717              authority: accounts.authority,
718              tuna_config: accounts.tuna_config,
719              mint_a: accounts.mint_a,
720              mint_b: accounts.mint_b,
721              token_program_a: accounts.token_program_a,
722              token_program_b: accounts.token_program_b,
723              market: accounts.market,
724              vault_a: accounts.vault_a,
725              vault_b: accounts.vault_b,
726              vault_a_ata: accounts.vault_a_ata,
727              vault_b_ata: accounts.vault_b_ata,
728              tuna_position: accounts.tuna_position,
729              tuna_position_ata_a: accounts.tuna_position_ata_a,
730              tuna_position_ata_b: accounts.tuna_position_ata_b,
731              fee_recipient_ata_a: accounts.fee_recipient_ata_a,
732              fee_recipient_ata_b: accounts.fee_recipient_ata_b,
733              tuna_position_owner: accounts.tuna_position_owner,
734              tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
735              tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
736              oracle_price_update_a: accounts.oracle_price_update_a,
737              oracle_price_update_b: accounts.oracle_price_update_b,
738              pool: accounts.pool,
739              jupiter_program: accounts.jupiter_program,
740              memo_program: accounts.memo_program,
741              system_program: accounts.system_program,
742                    __args: args,
743          }
744  }
745  #[inline(always)]
746  pub fn invoke(&self) -> solana_program_error::ProgramResult {
747    self.invoke_signed_with_remaining_accounts(&[], &[])
748  }
749  #[inline(always)]
750  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
751    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
752  }
753  #[inline(always)]
754  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
755    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
756  }
757  #[allow(clippy::arithmetic_side_effects)]
758  #[allow(clippy::clone_on_copy)]
759  #[allow(clippy::vec_init_then_push)]
760  pub fn invoke_signed_with_remaining_accounts(
761    &self,
762    signers_seeds: &[&[&[u8]]],
763    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
764  ) -> solana_program_error::ProgramResult {
765    let mut accounts = Vec::with_capacity(25+ remaining_accounts.len());
766                            accounts.push(solana_instruction::AccountMeta::new(
767            *self.authority.key,
768            true
769          ));
770                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
771            *self.tuna_config.key,
772            false
773          ));
774                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
775            *self.mint_a.key,
776            false
777          ));
778                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
779            *self.mint_b.key,
780            false
781          ));
782                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
783            *self.token_program_a.key,
784            false
785          ));
786                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
787            *self.token_program_b.key,
788            false
789          ));
790                                          accounts.push(solana_instruction::AccountMeta::new(
791            *self.market.key,
792            false
793          ));
794                                          accounts.push(solana_instruction::AccountMeta::new(
795            *self.vault_a.key,
796            false
797          ));
798                                          accounts.push(solana_instruction::AccountMeta::new(
799            *self.vault_b.key,
800            false
801          ));
802                                          accounts.push(solana_instruction::AccountMeta::new(
803            *self.vault_a_ata.key,
804            false
805          ));
806                                          accounts.push(solana_instruction::AccountMeta::new(
807            *self.vault_b_ata.key,
808            false
809          ));
810                                          accounts.push(solana_instruction::AccountMeta::new(
811            *self.tuna_position.key,
812            false
813          ));
814                                          accounts.push(solana_instruction::AccountMeta::new(
815            *self.tuna_position_ata_a.key,
816            false
817          ));
818                                          accounts.push(solana_instruction::AccountMeta::new(
819            *self.tuna_position_ata_b.key,
820            false
821          ));
822                                          accounts.push(solana_instruction::AccountMeta::new(
823            *self.fee_recipient_ata_a.key,
824            false
825          ));
826                                          accounts.push(solana_instruction::AccountMeta::new(
827            *self.fee_recipient_ata_b.key,
828            false
829          ));
830                                          accounts.push(solana_instruction::AccountMeta::new(
831            *self.tuna_position_owner.key,
832            false
833          ));
834                                          accounts.push(solana_instruction::AccountMeta::new(
835            *self.tuna_position_owner_ata_a.key,
836            false
837          ));
838                                          accounts.push(solana_instruction::AccountMeta::new(
839            *self.tuna_position_owner_ata_b.key,
840            false
841          ));
842                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
843            *self.oracle_price_update_a.key,
844            false
845          ));
846                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
847            *self.oracle_price_update_b.key,
848            false
849          ));
850                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
851            *self.pool.key,
852            false
853          ));
854                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
855            *self.jupiter_program.key,
856            false
857          ));
858                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
859            *self.memo_program.key,
860            false
861          ));
862                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
863            *self.system_program.key,
864            false
865          ));
866                      remaining_accounts.iter().for_each(|remaining_account| {
867      accounts.push(solana_instruction::AccountMeta {
868          pubkey: *remaining_account.0.key,
869          is_signer: remaining_account.1,
870          is_writable: remaining_account.2,
871      })
872    });
873    let mut data = borsh::to_vec(&LiquidateTunaSpotPositionJupiterInstructionData::new()).unwrap();
874          let mut args = borsh::to_vec(&self.__args).unwrap();
875      data.append(&mut args);
876    
877    let instruction = solana_instruction::Instruction {
878      program_id: crate::TUNA_ID,
879      accounts,
880      data,
881    };
882    let mut account_infos = Vec::with_capacity(26 + remaining_accounts.len());
883    account_infos.push(self.__program.clone());
884                  account_infos.push(self.authority.clone());
885                        account_infos.push(self.tuna_config.clone());
886                        account_infos.push(self.mint_a.clone());
887                        account_infos.push(self.mint_b.clone());
888                        account_infos.push(self.token_program_a.clone());
889                        account_infos.push(self.token_program_b.clone());
890                        account_infos.push(self.market.clone());
891                        account_infos.push(self.vault_a.clone());
892                        account_infos.push(self.vault_b.clone());
893                        account_infos.push(self.vault_a_ata.clone());
894                        account_infos.push(self.vault_b_ata.clone());
895                        account_infos.push(self.tuna_position.clone());
896                        account_infos.push(self.tuna_position_ata_a.clone());
897                        account_infos.push(self.tuna_position_ata_b.clone());
898                        account_infos.push(self.fee_recipient_ata_a.clone());
899                        account_infos.push(self.fee_recipient_ata_b.clone());
900                        account_infos.push(self.tuna_position_owner.clone());
901                        account_infos.push(self.tuna_position_owner_ata_a.clone());
902                        account_infos.push(self.tuna_position_owner_ata_b.clone());
903                        account_infos.push(self.oracle_price_update_a.clone());
904                        account_infos.push(self.oracle_price_update_b.clone());
905                        account_infos.push(self.pool.clone());
906                        account_infos.push(self.jupiter_program.clone());
907                        account_infos.push(self.memo_program.clone());
908                        account_infos.push(self.system_program.clone());
909              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
910
911    if signers_seeds.is_empty() {
912      solana_cpi::invoke(&instruction, &account_infos)
913    } else {
914      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
915    }
916  }
917}
918
919/// Instruction builder for `LiquidateTunaSpotPositionJupiter` via CPI.
920///
921/// ### Accounts:
922///
923                      ///   0. `[writable, signer]` authority
924          ///   1. `[]` tuna_config
925          ///   2. `[]` mint_a
926          ///   3. `[]` mint_b
927          ///   4. `[]` token_program_a
928          ///   5. `[]` token_program_b
929                ///   6. `[writable]` market
930                ///   7. `[writable]` vault_a
931                ///   8. `[writable]` vault_b
932                ///   9. `[writable]` vault_a_ata
933                ///   10. `[writable]` vault_b_ata
934                ///   11. `[writable]` tuna_position
935                ///   12. `[writable]` tuna_position_ata_a
936                ///   13. `[writable]` tuna_position_ata_b
937                ///   14. `[writable]` fee_recipient_ata_a
938                ///   15. `[writable]` fee_recipient_ata_b
939                ///   16. `[writable]` tuna_position_owner
940                ///   17. `[writable]` tuna_position_owner_ata_a
941                ///   18. `[writable]` tuna_position_owner_ata_b
942          ///   19. `[]` oracle_price_update_a
943          ///   20. `[]` oracle_price_update_b
944          ///   21. `[]` pool
945          ///   22. `[]` jupiter_program
946          ///   23. `[]` memo_program
947          ///   24. `[]` system_program
948#[derive(Clone, Debug)]
949pub struct LiquidateTunaSpotPositionJupiterCpiBuilder<'a, 'b> {
950  instruction: Box<LiquidateTunaSpotPositionJupiterCpiBuilderInstruction<'a, 'b>>,
951}
952
953impl<'a, 'b> LiquidateTunaSpotPositionJupiterCpiBuilder<'a, 'b> {
954  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
955    let instruction = Box::new(LiquidateTunaSpotPositionJupiterCpiBuilderInstruction {
956      __program: program,
957              authority: None,
958              tuna_config: None,
959              mint_a: None,
960              mint_b: None,
961              token_program_a: None,
962              token_program_b: None,
963              market: None,
964              vault_a: None,
965              vault_b: None,
966              vault_a_ata: None,
967              vault_b_ata: None,
968              tuna_position: None,
969              tuna_position_ata_a: None,
970              tuna_position_ata_b: None,
971              fee_recipient_ata_a: None,
972              fee_recipient_ata_b: None,
973              tuna_position_owner: None,
974              tuna_position_owner_ata_a: None,
975              tuna_position_owner_ata_b: None,
976              oracle_price_update_a: None,
977              oracle_price_update_b: None,
978              pool: None,
979              jupiter_program: None,
980              memo_program: None,
981              system_program: None,
982                                            decrease_percent: None,
983                                jupiter_route_data: None,
984                                remaining_accounts_info: None,
985                    __remaining_accounts: Vec::new(),
986    });
987    Self { instruction }
988  }
989      /// 
990/// TUNA accounts
991/// 
992#[inline(always)]
993    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
994                        self.instruction.authority = Some(authority);
995                    self
996    }
997      #[inline(always)]
998    pub fn tuna_config(&mut self, tuna_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
999                        self.instruction.tuna_config = Some(tuna_config);
1000                    self
1001    }
1002      #[inline(always)]
1003    pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1004                        self.instruction.mint_a = Some(mint_a);
1005                    self
1006    }
1007      #[inline(always)]
1008    pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1009                        self.instruction.mint_b = Some(mint_b);
1010                    self
1011    }
1012      #[inline(always)]
1013    pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1014                        self.instruction.token_program_a = Some(token_program_a);
1015                    self
1016    }
1017      #[inline(always)]
1018    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1019                        self.instruction.token_program_b = Some(token_program_b);
1020                    self
1021    }
1022      #[inline(always)]
1023    pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1024                        self.instruction.market = Some(market);
1025                    self
1026    }
1027      #[inline(always)]
1028    pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1029                        self.instruction.vault_a = Some(vault_a);
1030                    self
1031    }
1032      #[inline(always)]
1033    pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1034                        self.instruction.vault_b = Some(vault_b);
1035                    self
1036    }
1037      #[inline(always)]
1038    pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1039                        self.instruction.vault_a_ata = Some(vault_a_ata);
1040                    self
1041    }
1042      #[inline(always)]
1043    pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1044                        self.instruction.vault_b_ata = Some(vault_b_ata);
1045                    self
1046    }
1047      #[inline(always)]
1048    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1049                        self.instruction.tuna_position = Some(tuna_position);
1050                    self
1051    }
1052      #[inline(always)]
1053    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1054                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
1055                    self
1056    }
1057      #[inline(always)]
1058    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1059                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
1060                    self
1061    }
1062      #[inline(always)]
1063    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1064                        self.instruction.fee_recipient_ata_a = Some(fee_recipient_ata_a);
1065                    self
1066    }
1067      #[inline(always)]
1068    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1069                        self.instruction.fee_recipient_ata_b = Some(fee_recipient_ata_b);
1070                    self
1071    }
1072      #[inline(always)]
1073    pub fn tuna_position_owner(&mut self, tuna_position_owner: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1074                        self.instruction.tuna_position_owner = Some(tuna_position_owner);
1075                    self
1076    }
1077      #[inline(always)]
1078    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1079                        self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
1080                    self
1081    }
1082      #[inline(always)]
1083    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1084                        self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
1085                    self
1086    }
1087      #[inline(always)]
1088    pub fn oracle_price_update_a(&mut self, oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1089                        self.instruction.oracle_price_update_a = Some(oracle_price_update_a);
1090                    self
1091    }
1092      #[inline(always)]
1093    pub fn oracle_price_update_b(&mut self, oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1094                        self.instruction.oracle_price_update_b = Some(oracle_price_update_b);
1095                    self
1096    }
1097      #[inline(always)]
1098    pub fn pool(&mut self, pool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1099                        self.instruction.pool = Some(pool);
1100                    self
1101    }
1102      /// 
1103/// Jupiter accounts
1104/// 
1105#[inline(always)]
1106    pub fn jupiter_program(&mut self, jupiter_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1107                        self.instruction.jupiter_program = Some(jupiter_program);
1108                    self
1109    }
1110      /// 
1111/// Other accounts
1112/// 
1113#[inline(always)]
1114    pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1115                        self.instruction.memo_program = Some(memo_program);
1116                    self
1117    }
1118      #[inline(always)]
1119    pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1120                        self.instruction.system_program = Some(system_program);
1121                    self
1122    }
1123                    #[inline(always)]
1124      pub fn decrease_percent(&mut self, decrease_percent: u32) -> &mut Self {
1125        self.instruction.decrease_percent = Some(decrease_percent);
1126        self
1127      }
1128                #[inline(always)]
1129      pub fn jupiter_route_data(&mut self, jupiter_route_data: Vec<u8>) -> &mut Self {
1130        self.instruction.jupiter_route_data = Some(jupiter_route_data);
1131        self
1132      }
1133                #[inline(always)]
1134      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
1135        self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
1136        self
1137      }
1138        /// Add an additional account to the instruction.
1139  #[inline(always)]
1140  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
1141    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
1142    self
1143  }
1144  /// Add additional accounts to the instruction.
1145  ///
1146  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
1147  /// and a `bool` indicating whether the account is a signer or not.
1148  #[inline(always)]
1149  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
1150    self.instruction.__remaining_accounts.extend_from_slice(accounts);
1151    self
1152  }
1153  #[inline(always)]
1154  pub fn invoke(&self) -> solana_program_error::ProgramResult {
1155    self.invoke_signed(&[])
1156  }
1157  #[allow(clippy::clone_on_copy)]
1158  #[allow(clippy::vec_init_then_push)]
1159  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
1160          let args = LiquidateTunaSpotPositionJupiterInstructionArgs {
1161                                                              decrease_percent: self.instruction.decrease_percent.clone().expect("decrease_percent is not set"),
1162                                                                  jupiter_route_data: self.instruction.jupiter_route_data.clone().expect("jupiter_route_data is not set"),
1163                                                                  remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
1164                                    };
1165        let instruction = LiquidateTunaSpotPositionJupiterCpi {
1166        __program: self.instruction.__program,
1167                  
1168          authority: self.instruction.authority.expect("authority is not set"),
1169                  
1170          tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
1171                  
1172          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
1173                  
1174          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
1175                  
1176          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
1177                  
1178          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
1179                  
1180          market: self.instruction.market.expect("market is not set"),
1181                  
1182          vault_a: self.instruction.vault_a.expect("vault_a is not set"),
1183                  
1184          vault_b: self.instruction.vault_b.expect("vault_b is not set"),
1185                  
1186          vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
1187                  
1188          vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
1189                  
1190          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
1191                  
1192          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
1193                  
1194          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
1195                  
1196          fee_recipient_ata_a: self.instruction.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
1197                  
1198          fee_recipient_ata_b: self.instruction.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
1199                  
1200          tuna_position_owner: self.instruction.tuna_position_owner.expect("tuna_position_owner is not set"),
1201                  
1202          tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
1203                  
1204          tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
1205                  
1206          oracle_price_update_a: self.instruction.oracle_price_update_a.expect("oracle_price_update_a is not set"),
1207                  
1208          oracle_price_update_b: self.instruction.oracle_price_update_b.expect("oracle_price_update_b is not set"),
1209                  
1210          pool: self.instruction.pool.expect("pool is not set"),
1211                  
1212          jupiter_program: self.instruction.jupiter_program.expect("jupiter_program is not set"),
1213                  
1214          memo_program: self.instruction.memo_program.expect("memo_program is not set"),
1215                  
1216          system_program: self.instruction.system_program.expect("system_program is not set"),
1217                          __args: args,
1218            };
1219    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
1220  }
1221}
1222
1223#[derive(Clone, Debug)]
1224struct LiquidateTunaSpotPositionJupiterCpiBuilderInstruction<'a, 'b> {
1225  __program: &'b solana_account_info::AccountInfo<'a>,
1226            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
1227                tuna_config: Option<&'b solana_account_info::AccountInfo<'a>>,
1228                mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1229                mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1230                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1231                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1232                market: Option<&'b solana_account_info::AccountInfo<'a>>,
1233                vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1234                vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1235                vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1236                vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1237                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
1238                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1239                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1240                fee_recipient_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1241                fee_recipient_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1242                tuna_position_owner: Option<&'b solana_account_info::AccountInfo<'a>>,
1243                tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1244                tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1245                oracle_price_update_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1246                oracle_price_update_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1247                pool: Option<&'b solana_account_info::AccountInfo<'a>>,
1248                jupiter_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1249                memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1250                system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1251                        decrease_percent: Option<u32>,
1252                jupiter_route_data: Option<Vec<u8>>,
1253                remaining_accounts_info: Option<RemainingAccountsInfo>,
1254        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
1255  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
1256}
1257