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