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