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