Skip to main content

defituna_client/generated/instructions/
collect_and_compound_fees_fusion.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_FUSION_DISCRIMINATOR: [u8; 8] = [61, 213, 30, 201, 89, 220, 156, 13];
13
14/// Accounts.
15#[derive(Debug)]
16pub struct CollectAndCompoundFeesFusion {
17            /// 
18/// TUNA accounts
19/// 
20
21    
22              
23          pub authority: solana_pubkey::Pubkey,
24          
25              
26          pub tuna_config: solana_pubkey::Pubkey,
27          
28              
29          pub mint_a: solana_pubkey::Pubkey,
30          
31              
32          pub mint_b: solana_pubkey::Pubkey,
33          
34              
35          pub token_program_a: solana_pubkey::Pubkey,
36          
37              
38          pub token_program_b: solana_pubkey::Pubkey,
39          
40              
41          pub market: solana_pubkey::Pubkey,
42          
43              
44          pub vault_a: solana_pubkey::Pubkey,
45          
46              
47          pub vault_b: solana_pubkey::Pubkey,
48          
49              
50          pub vault_a_ata: solana_pubkey::Pubkey,
51          
52              
53          pub vault_b_ata: solana_pubkey::Pubkey,
54          
55              
56          pub tuna_position: solana_pubkey::Pubkey,
57          
58              
59          pub tuna_position_ata: solana_pubkey::Pubkey,
60          
61              
62          pub tuna_position_ata_a: solana_pubkey::Pubkey,
63          
64              
65          pub tuna_position_ata_b: solana_pubkey::Pubkey,
66          
67              
68          pub fee_recipient_ata_a: solana_pubkey::Pubkey,
69          
70              
71          pub fee_recipient_ata_b: solana_pubkey::Pubkey,
72          
73              
74          pub oracle_price_update_a: solana_pubkey::Pubkey,
75          
76              
77          pub oracle_price_update_b: solana_pubkey::Pubkey,
78                /// 
79/// Fusion accounts
80/// 
81
82    
83              
84          pub fusionamm_program: solana_pubkey::Pubkey,
85          
86              
87          pub fusion_pool: solana_pubkey::Pubkey,
88          
89              
90          pub fusion_position: 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 CollectAndCompoundFeesFusion {
104  pub fn instruction(&self, args: CollectAndCompoundFeesFusionInstructionArgs) -> 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: CollectAndCompoundFeesFusionInstructionArgs, 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_readonly(
128            self.token_program_a,
129            false
130          ));
131                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
132            self.token_program_b,
133            false
134          ));
135                                          accounts.push(solana_instruction::AccountMeta::new(
136            self.market,
137            false
138          ));
139                                          accounts.push(solana_instruction::AccountMeta::new(
140            self.vault_a,
141            false
142          ));
143                                          accounts.push(solana_instruction::AccountMeta::new(
144            self.vault_b,
145            false
146          ));
147                                          accounts.push(solana_instruction::AccountMeta::new(
148            self.vault_a_ata,
149            false
150          ));
151                                          accounts.push(solana_instruction::AccountMeta::new(
152            self.vault_b_ata,
153            false
154          ));
155                                          accounts.push(solana_instruction::AccountMeta::new(
156            self.tuna_position,
157            false
158          ));
159                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
160            self.tuna_position_ata,
161            false
162          ));
163                                          accounts.push(solana_instruction::AccountMeta::new(
164            self.tuna_position_ata_a,
165            false
166          ));
167                                          accounts.push(solana_instruction::AccountMeta::new(
168            self.tuna_position_ata_b,
169            false
170          ));
171                                          accounts.push(solana_instruction::AccountMeta::new(
172            self.fee_recipient_ata_a,
173            false
174          ));
175                                          accounts.push(solana_instruction::AccountMeta::new(
176            self.fee_recipient_ata_b,
177            false
178          ));
179                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
180            self.oracle_price_update_a,
181            false
182          ));
183                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
184            self.oracle_price_update_b,
185            false
186          ));
187                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
188            self.fusionamm_program,
189            false
190          ));
191                                          accounts.push(solana_instruction::AccountMeta::new(
192            self.fusion_pool,
193            false
194          ));
195                                          accounts.push(solana_instruction::AccountMeta::new(
196            self.fusion_position,
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(&CollectAndCompoundFeesFusionInstructionData::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 CollectAndCompoundFeesFusionInstructionData {
223            discriminator: [u8; 8],
224                  }
225
226impl CollectAndCompoundFeesFusionInstructionData {
227  pub fn new() -> Self {
228    Self {
229                        discriminator: [61, 213, 30, 201, 89, 220, 156, 13],
230                                              }
231  }
232}
233
234impl Default for CollectAndCompoundFeesFusionInstructionData {
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 CollectAndCompoundFeesFusionInstructionArgs {
243                  pub use_leverage: bool,
244                pub remaining_accounts_info: RemainingAccountsInfo,
245      }
246
247
248/// Instruction builder for `CollectAndCompoundFeesFusion`.
249///
250/// ### Accounts:
251///
252                      ///   0. `[writable, signer]` authority
253          ///   1. `[]` tuna_config
254          ///   2. `[]` mint_a
255          ///   3. `[]` mint_b
256          ///   4. `[]` token_program_a
257          ///   5. `[]` token_program_b
258                ///   6. `[writable]` market
259                ///   7. `[writable]` vault_a
260                ///   8. `[writable]` vault_b
261                ///   9. `[writable]` vault_a_ata
262                ///   10. `[writable]` vault_b_ata
263                ///   11. `[writable]` tuna_position
264          ///   12. `[]` tuna_position_ata
265                ///   13. `[writable]` tuna_position_ata_a
266                ///   14. `[writable]` tuna_position_ata_b
267                ///   15. `[writable]` fee_recipient_ata_a
268                ///   16. `[writable]` fee_recipient_ata_b
269          ///   17. `[]` oracle_price_update_a
270          ///   18. `[]` oracle_price_update_b
271          ///   19. `[]` fusionamm_program
272                ///   20. `[writable]` fusion_pool
273                ///   21. `[writable]` fusion_position
274          ///   22. `[]` memo_program
275                ///   23. `[optional]` system_program (default to `11111111111111111111111111111111`)
276#[derive(Clone, Debug, Default)]
277pub struct CollectAndCompoundFeesFusionBuilder {
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                token_program_a: Option<solana_pubkey::Pubkey>,
283                token_program_b: Option<solana_pubkey::Pubkey>,
284                market: Option<solana_pubkey::Pubkey>,
285                vault_a: Option<solana_pubkey::Pubkey>,
286                vault_b: Option<solana_pubkey::Pubkey>,
287                vault_a_ata: Option<solana_pubkey::Pubkey>,
288                vault_b_ata: Option<solana_pubkey::Pubkey>,
289                tuna_position: Option<solana_pubkey::Pubkey>,
290                tuna_position_ata: Option<solana_pubkey::Pubkey>,
291                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
292                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
293                fee_recipient_ata_a: Option<solana_pubkey::Pubkey>,
294                fee_recipient_ata_b: Option<solana_pubkey::Pubkey>,
295                oracle_price_update_a: Option<solana_pubkey::Pubkey>,
296                oracle_price_update_b: Option<solana_pubkey::Pubkey>,
297                fusionamm_program: Option<solana_pubkey::Pubkey>,
298                fusion_pool: Option<solana_pubkey::Pubkey>,
299                fusion_position: 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 CollectAndCompoundFeesFusionBuilder {
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 token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
336                        self.token_program_a = Some(token_program_a);
337                    self
338    }
339            #[inline(always)]
340    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
341                        self.token_program_b = Some(token_program_b);
342                    self
343    }
344            #[inline(always)]
345    pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
346                        self.market = Some(market);
347                    self
348    }
349            #[inline(always)]
350    pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
351                        self.vault_a = Some(vault_a);
352                    self
353    }
354            #[inline(always)]
355    pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
356                        self.vault_b = Some(vault_b);
357                    self
358    }
359            #[inline(always)]
360    pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
361                        self.vault_a_ata = Some(vault_a_ata);
362                    self
363    }
364            #[inline(always)]
365    pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
366                        self.vault_b_ata = Some(vault_b_ata);
367                    self
368    }
369            #[inline(always)]
370    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
371                        self.tuna_position = Some(tuna_position);
372                    self
373    }
374            #[inline(always)]
375    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
376                        self.tuna_position_ata = Some(tuna_position_ata);
377                    self
378    }
379            #[inline(always)]
380    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
381                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
382                    self
383    }
384            #[inline(always)]
385    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
386                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
387                    self
388    }
389            #[inline(always)]
390    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: solana_pubkey::Pubkey) -> &mut Self {
391                        self.fee_recipient_ata_a = Some(fee_recipient_ata_a);
392                    self
393    }
394            #[inline(always)]
395    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: solana_pubkey::Pubkey) -> &mut Self {
396                        self.fee_recipient_ata_b = Some(fee_recipient_ata_b);
397                    self
398    }
399            #[inline(always)]
400    pub fn oracle_price_update_a(&mut self, oracle_price_update_a: solana_pubkey::Pubkey) -> &mut Self {
401                        self.oracle_price_update_a = Some(oracle_price_update_a);
402                    self
403    }
404            #[inline(always)]
405    pub fn oracle_price_update_b(&mut self, oracle_price_update_b: solana_pubkey::Pubkey) -> &mut Self {
406                        self.oracle_price_update_b = Some(oracle_price_update_b);
407                    self
408    }
409            /// 
410/// Fusion accounts
411/// 
412#[inline(always)]
413    pub fn fusionamm_program(&mut self, fusionamm_program: solana_pubkey::Pubkey) -> &mut Self {
414                        self.fusionamm_program = Some(fusionamm_program);
415                    self
416    }
417            #[inline(always)]
418    pub fn fusion_pool(&mut self, fusion_pool: solana_pubkey::Pubkey) -> &mut Self {
419                        self.fusion_pool = Some(fusion_pool);
420                    self
421    }
422            #[inline(always)]
423    pub fn fusion_position(&mut self, fusion_position: solana_pubkey::Pubkey) -> &mut Self {
424                        self.fusion_position = Some(fusion_position);
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 = CollectAndCompoundFeesFusion {
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                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
471                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
472                                        market: self.market.expect("market is not set"),
473                                        vault_a: self.vault_a.expect("vault_a is not set"),
474                                        vault_b: self.vault_b.expect("vault_b is not set"),
475                                        vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
476                                        vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
477                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
478                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
479                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
480                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
481                                        fee_recipient_ata_a: self.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
482                                        fee_recipient_ata_b: self.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
483                                        oracle_price_update_a: self.oracle_price_update_a.expect("oracle_price_update_a is not set"),
484                                        oracle_price_update_b: self.oracle_price_update_b.expect("oracle_price_update_b is not set"),
485                                        fusionamm_program: self.fusionamm_program.expect("fusionamm_program is not set"),
486                                        fusion_pool: self.fusion_pool.expect("fusion_pool is not set"),
487                                        fusion_position: self.fusion_position.expect("fusion_position 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 = CollectAndCompoundFeesFusionInstructionArgs {
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_fusion` CPI accounts.
501  pub struct CollectAndCompoundFeesFusionCpiAccounts<'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 token_program_a: &'b solana_account_info::AccountInfo<'a>,
521                
522                    
523              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
524                
525                    
526              pub market: &'b solana_account_info::AccountInfo<'a>,
527                
528                    
529              pub vault_a: &'b solana_account_info::AccountInfo<'a>,
530                
531                    
532              pub vault_b: &'b solana_account_info::AccountInfo<'a>,
533                
534                    
535              pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
536                
537                    
538              pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
539                
540                    
541              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
542                
543                    
544              pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
545                
546                    
547              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
548                
549                    
550              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
551                
552                    
553              pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
554                
555                    
556              pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
557                
558                    
559              pub oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>,
560                
561                    
562              pub oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>,
563                        /// 
564/// Fusion accounts
565/// 
566
567      
568                    
569              pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
570                
571                    
572              pub fusion_pool: &'b solana_account_info::AccountInfo<'a>,
573                
574                    
575              pub fusion_position: &'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_fusion` CPI instruction.
589pub struct CollectAndCompoundFeesFusionCpi<'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 token_program_a: &'b solana_account_info::AccountInfo<'a>,
611          
612              
613          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
614          
615              
616          pub market: &'b solana_account_info::AccountInfo<'a>,
617          
618              
619          pub vault_a: &'b solana_account_info::AccountInfo<'a>,
620          
621              
622          pub vault_b: &'b solana_account_info::AccountInfo<'a>,
623          
624              
625          pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
626          
627              
628          pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
629          
630              
631          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
632          
633              
634          pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
635          
636              
637          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
638          
639              
640          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
641          
642              
643          pub fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>,
644          
645              
646          pub fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>,
647          
648              
649          pub oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>,
650          
651              
652          pub oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>,
653                /// 
654/// Fusion accounts
655/// 
656
657    
658              
659          pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
660          
661              
662          pub fusion_pool: &'b solana_account_info::AccountInfo<'a>,
663          
664              
665          pub fusion_position: &'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: CollectAndCompoundFeesFusionInstructionArgs,
678  }
679
680impl<'a, 'b> CollectAndCompoundFeesFusionCpi<'a, 'b> {
681  pub fn new(
682    program: &'b solana_account_info::AccountInfo<'a>,
683          accounts: CollectAndCompoundFeesFusionCpiAccounts<'a, 'b>,
684              args: CollectAndCompoundFeesFusionInstructionArgs,
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              token_program_a: accounts.token_program_a,
693              token_program_b: accounts.token_program_b,
694              market: accounts.market,
695              vault_a: accounts.vault_a,
696              vault_b: accounts.vault_b,
697              vault_a_ata: accounts.vault_a_ata,
698              vault_b_ata: accounts.vault_b_ata,
699              tuna_position: accounts.tuna_position,
700              tuna_position_ata: accounts.tuna_position_ata,
701              tuna_position_ata_a: accounts.tuna_position_ata_a,
702              tuna_position_ata_b: accounts.tuna_position_ata_b,
703              fee_recipient_ata_a: accounts.fee_recipient_ata_a,
704              fee_recipient_ata_b: accounts.fee_recipient_ata_b,
705              oracle_price_update_a: accounts.oracle_price_update_a,
706              oracle_price_update_b: accounts.oracle_price_update_b,
707              fusionamm_program: accounts.fusionamm_program,
708              fusion_pool: accounts.fusion_pool,
709              fusion_position: accounts.fusion_position,
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_readonly(
753            *self.token_program_a.key,
754            false
755          ));
756                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
757            *self.token_program_b.key,
758            false
759          ));
760                                          accounts.push(solana_instruction::AccountMeta::new(
761            *self.market.key,
762            false
763          ));
764                                          accounts.push(solana_instruction::AccountMeta::new(
765            *self.vault_a.key,
766            false
767          ));
768                                          accounts.push(solana_instruction::AccountMeta::new(
769            *self.vault_b.key,
770            false
771          ));
772                                          accounts.push(solana_instruction::AccountMeta::new(
773            *self.vault_a_ata.key,
774            false
775          ));
776                                          accounts.push(solana_instruction::AccountMeta::new(
777            *self.vault_b_ata.key,
778            false
779          ));
780                                          accounts.push(solana_instruction::AccountMeta::new(
781            *self.tuna_position.key,
782            false
783          ));
784                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
785            *self.tuna_position_ata.key,
786            false
787          ));
788                                          accounts.push(solana_instruction::AccountMeta::new(
789            *self.tuna_position_ata_a.key,
790            false
791          ));
792                                          accounts.push(solana_instruction::AccountMeta::new(
793            *self.tuna_position_ata_b.key,
794            false
795          ));
796                                          accounts.push(solana_instruction::AccountMeta::new(
797            *self.fee_recipient_ata_a.key,
798            false
799          ));
800                                          accounts.push(solana_instruction::AccountMeta::new(
801            *self.fee_recipient_ata_b.key,
802            false
803          ));
804                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
805            *self.oracle_price_update_a.key,
806            false
807          ));
808                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
809            *self.oracle_price_update_b.key,
810            false
811          ));
812                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
813            *self.fusionamm_program.key,
814            false
815          ));
816                                          accounts.push(solana_instruction::AccountMeta::new(
817            *self.fusion_pool.key,
818            false
819          ));
820                                          accounts.push(solana_instruction::AccountMeta::new(
821            *self.fusion_position.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(&CollectAndCompoundFeesFusionInstructionData::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.token_program_a.clone());
855                        account_infos.push(self.token_program_b.clone());
856                        account_infos.push(self.market.clone());
857                        account_infos.push(self.vault_a.clone());
858                        account_infos.push(self.vault_b.clone());
859                        account_infos.push(self.vault_a_ata.clone());
860                        account_infos.push(self.vault_b_ata.clone());
861                        account_infos.push(self.tuna_position.clone());
862                        account_infos.push(self.tuna_position_ata.clone());
863                        account_infos.push(self.tuna_position_ata_a.clone());
864                        account_infos.push(self.tuna_position_ata_b.clone());
865                        account_infos.push(self.fee_recipient_ata_a.clone());
866                        account_infos.push(self.fee_recipient_ata_b.clone());
867                        account_infos.push(self.oracle_price_update_a.clone());
868                        account_infos.push(self.oracle_price_update_b.clone());
869                        account_infos.push(self.fusionamm_program.clone());
870                        account_infos.push(self.fusion_pool.clone());
871                        account_infos.push(self.fusion_position.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 `CollectAndCompoundFeesFusion` 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. `[]` token_program_a
893          ///   5. `[]` token_program_b
894                ///   6. `[writable]` market
895                ///   7. `[writable]` vault_a
896                ///   8. `[writable]` vault_b
897                ///   9. `[writable]` vault_a_ata
898                ///   10. `[writable]` vault_b_ata
899                ///   11. `[writable]` tuna_position
900          ///   12. `[]` tuna_position_ata
901                ///   13. `[writable]` tuna_position_ata_a
902                ///   14. `[writable]` tuna_position_ata_b
903                ///   15. `[writable]` fee_recipient_ata_a
904                ///   16. `[writable]` fee_recipient_ata_b
905          ///   17. `[]` oracle_price_update_a
906          ///   18. `[]` oracle_price_update_b
907          ///   19. `[]` fusionamm_program
908                ///   20. `[writable]` fusion_pool
909                ///   21. `[writable]` fusion_position
910          ///   22. `[]` memo_program
911          ///   23. `[]` system_program
912#[derive(Clone, Debug)]
913pub struct CollectAndCompoundFeesFusionCpiBuilder<'a, 'b> {
914  instruction: Box<CollectAndCompoundFeesFusionCpiBuilderInstruction<'a, 'b>>,
915}
916
917impl<'a, 'b> CollectAndCompoundFeesFusionCpiBuilder<'a, 'b> {
918  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
919    let instruction = Box::new(CollectAndCompoundFeesFusionCpiBuilderInstruction {
920      __program: program,
921              authority: None,
922              tuna_config: None,
923              mint_a: None,
924              mint_b: None,
925              token_program_a: None,
926              token_program_b: None,
927              market: None,
928              vault_a: None,
929              vault_b: None,
930              vault_a_ata: None,
931              vault_b_ata: None,
932              tuna_position: None,
933              tuna_position_ata: None,
934              tuna_position_ata_a: None,
935              tuna_position_ata_b: None,
936              fee_recipient_ata_a: None,
937              fee_recipient_ata_b: None,
938              oracle_price_update_a: None,
939              oracle_price_update_b: None,
940              fusionamm_program: None,
941              fusion_pool: None,
942              fusion_position: 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 token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
976                        self.instruction.token_program_a = Some(token_program_a);
977                    self
978    }
979      #[inline(always)]
980    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
981                        self.instruction.token_program_b = Some(token_program_b);
982                    self
983    }
984      #[inline(always)]
985    pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
986                        self.instruction.market = Some(market);
987                    self
988    }
989      #[inline(always)]
990    pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
991                        self.instruction.vault_a = Some(vault_a);
992                    self
993    }
994      #[inline(always)]
995    pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
996                        self.instruction.vault_b = Some(vault_b);
997                    self
998    }
999      #[inline(always)]
1000    pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1001                        self.instruction.vault_a_ata = Some(vault_a_ata);
1002                    self
1003    }
1004      #[inline(always)]
1005    pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1006                        self.instruction.vault_b_ata = Some(vault_b_ata);
1007                    self
1008    }
1009      #[inline(always)]
1010    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1011                        self.instruction.tuna_position = Some(tuna_position);
1012                    self
1013    }
1014      #[inline(always)]
1015    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1016                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
1017                    self
1018    }
1019      #[inline(always)]
1020    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1021                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
1022                    self
1023    }
1024      #[inline(always)]
1025    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1026                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
1027                    self
1028    }
1029      #[inline(always)]
1030    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1031                        self.instruction.fee_recipient_ata_a = Some(fee_recipient_ata_a);
1032                    self
1033    }
1034      #[inline(always)]
1035    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1036                        self.instruction.fee_recipient_ata_b = Some(fee_recipient_ata_b);
1037                    self
1038    }
1039      #[inline(always)]
1040    pub fn oracle_price_update_a(&mut self, oracle_price_update_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1041                        self.instruction.oracle_price_update_a = Some(oracle_price_update_a);
1042                    self
1043    }
1044      #[inline(always)]
1045    pub fn oracle_price_update_b(&mut self, oracle_price_update_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1046                        self.instruction.oracle_price_update_b = Some(oracle_price_update_b);
1047                    self
1048    }
1049      /// 
1050/// Fusion accounts
1051/// 
1052#[inline(always)]
1053    pub fn fusionamm_program(&mut self, fusionamm_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1054                        self.instruction.fusionamm_program = Some(fusionamm_program);
1055                    self
1056    }
1057      #[inline(always)]
1058    pub fn fusion_pool(&mut self, fusion_pool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1059                        self.instruction.fusion_pool = Some(fusion_pool);
1060                    self
1061    }
1062      #[inline(always)]
1063    pub fn fusion_position(&mut self, fusion_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
1064                        self.instruction.fusion_position = Some(fusion_position);
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 = CollectAndCompoundFeesFusionInstructionArgs {
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 = CollectAndCompoundFeesFusionCpi {
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          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
1128                  
1129          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
1130                  
1131          market: self.instruction.market.expect("market is not set"),
1132                  
1133          vault_a: self.instruction.vault_a.expect("vault_a is not set"),
1134                  
1135          vault_b: self.instruction.vault_b.expect("vault_b is not set"),
1136                  
1137          vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
1138                  
1139          vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
1140                  
1141          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
1142                  
1143          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
1144                  
1145          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
1146                  
1147          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
1148                  
1149          fee_recipient_ata_a: self.instruction.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
1150                  
1151          fee_recipient_ata_b: self.instruction.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
1152                  
1153          oracle_price_update_a: self.instruction.oracle_price_update_a.expect("oracle_price_update_a is not set"),
1154                  
1155          oracle_price_update_b: self.instruction.oracle_price_update_b.expect("oracle_price_update_b is not set"),
1156                  
1157          fusionamm_program: self.instruction.fusionamm_program.expect("fusionamm_program is not set"),
1158                  
1159          fusion_pool: self.instruction.fusion_pool.expect("fusion_pool is not set"),
1160                  
1161          fusion_position: self.instruction.fusion_position.expect("fusion_position 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 CollectAndCompoundFeesFusionCpiBuilderInstruction<'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                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1180                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1181                market: Option<&'b solana_account_info::AccountInfo<'a>>,
1182                vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1183                vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1184                vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1185                vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1186                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
1187                tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
1188                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1189                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1190                fee_recipient_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1191                fee_recipient_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1192                oracle_price_update_a: Option<&'b solana_account_info::AccountInfo<'a>>,
1193                oracle_price_update_b: Option<&'b solana_account_info::AccountInfo<'a>>,
1194                fusionamm_program: Option<&'b solana_account_info::AccountInfo<'a>>,
1195                fusion_pool: Option<&'b solana_account_info::AccountInfo<'a>>,
1196                fusion_position: 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