defituna_client/generated/instructions/
collect_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
12/// Accounts.
13#[derive(Debug)]
14pub struct CollectFeesFusion {
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 tuna_position: solana_program::pubkey::Pubkey,
40          
41              
42          pub tuna_position_ata: solana_program::pubkey::Pubkey,
43          
44              
45          pub tuna_position_ata_a: solana_program::pubkey::Pubkey,
46          
47              
48          pub tuna_position_ata_b: solana_program::pubkey::Pubkey,
49          
50              
51          pub tuna_position_owner_ata_a: solana_program::pubkey::Pubkey,
52          
53              
54          pub tuna_position_owner_ata_b: solana_program::pubkey::Pubkey,
55                /// 
56/// Fusion accounts
57/// 
58
59    
60              
61          pub fusionamm_program: solana_program::pubkey::Pubkey,
62          
63              
64          pub fusion_pool: solana_program::pubkey::Pubkey,
65          
66              
67          pub fusion_position: solana_program::pubkey::Pubkey,
68          
69              
70          pub memo_program: solana_program::pubkey::Pubkey,
71      }
72
73impl CollectFeesFusion {
74  pub fn instruction(&self, args: CollectFeesFusionInstructionArgs) -> solana_program::instruction::Instruction {
75    self.instruction_with_remaining_accounts(args, &[])
76  }
77  #[allow(clippy::arithmetic_side_effects)]
78  #[allow(clippy::vec_init_then_push)]
79  pub fn instruction_with_remaining_accounts(&self, args: CollectFeesFusionInstructionArgs, remaining_accounts: &[solana_program::instruction::AccountMeta]) -> solana_program::instruction::Instruction {
80    let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
81                            accounts.push(solana_program::instruction::AccountMeta::new(
82            self.authority,
83            true
84          ));
85                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
86            self.tuna_config,
87            false
88          ));
89                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
90            self.mint_a,
91            false
92          ));
93                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
94            self.mint_b,
95            false
96          ));
97                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
98            self.token_program_a,
99            false
100          ));
101                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
102            self.token_program_b,
103            false
104          ));
105                                          accounts.push(solana_program::instruction::AccountMeta::new(
106            self.tuna_position,
107            false
108          ));
109                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
110            self.tuna_position_ata,
111            false
112          ));
113                                          accounts.push(solana_program::instruction::AccountMeta::new(
114            self.tuna_position_ata_a,
115            false
116          ));
117                                          accounts.push(solana_program::instruction::AccountMeta::new(
118            self.tuna_position_ata_b,
119            false
120          ));
121                                          accounts.push(solana_program::instruction::AccountMeta::new(
122            self.tuna_position_owner_ata_a,
123            false
124          ));
125                                          accounts.push(solana_program::instruction::AccountMeta::new(
126            self.tuna_position_owner_ata_b,
127            false
128          ));
129                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
130            self.fusionamm_program,
131            false
132          ));
133                                          accounts.push(solana_program::instruction::AccountMeta::new(
134            self.fusion_pool,
135            false
136          ));
137                                          accounts.push(solana_program::instruction::AccountMeta::new(
138            self.fusion_position,
139            false
140          ));
141                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
142            self.memo_program,
143            false
144          ));
145                      accounts.extend_from_slice(remaining_accounts);
146    let mut data = borsh::to_vec(&CollectFeesFusionInstructionData::new()).unwrap();
147          let mut args = borsh::to_vec(&args).unwrap();
148      data.append(&mut args);
149    
150    solana_program::instruction::Instruction {
151      program_id: crate::TUNA_ID,
152      accounts,
153      data,
154    }
155  }
156}
157
158#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
159#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
160 pub struct CollectFeesFusionInstructionData {
161            discriminator: [u8; 8],
162            }
163
164impl CollectFeesFusionInstructionData {
165  pub fn new() -> Self {
166    Self {
167                        discriminator: [52, 219, 25, 250, 31, 203, 9, 129],
168                                }
169  }
170}
171
172impl Default for CollectFeesFusionInstructionData {
173  fn default() -> Self {
174    Self::new()
175  }
176}
177
178#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
179#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
180 pub struct CollectFeesFusionInstructionArgs {
181                  pub remaining_accounts_info: RemainingAccountsInfo,
182      }
183
184
185/// Instruction builder for `CollectFeesFusion`.
186///
187/// ### Accounts:
188///
189                      ///   0. `[writable, signer]` authority
190          ///   1. `[]` tuna_config
191          ///   2. `[]` mint_a
192          ///   3. `[]` mint_b
193          ///   4. `[]` token_program_a
194          ///   5. `[]` token_program_b
195                ///   6. `[writable]` tuna_position
196          ///   7. `[]` tuna_position_ata
197                ///   8. `[writable]` tuna_position_ata_a
198                ///   9. `[writable]` tuna_position_ata_b
199                ///   10. `[writable]` tuna_position_owner_ata_a
200                ///   11. `[writable]` tuna_position_owner_ata_b
201          ///   12. `[]` fusionamm_program
202                ///   13. `[writable]` fusion_pool
203                ///   14. `[writable]` fusion_position
204          ///   15. `[]` memo_program
205#[derive(Clone, Debug, Default)]
206pub struct CollectFeesFusionBuilder {
207            authority: Option<solana_program::pubkey::Pubkey>,
208                tuna_config: Option<solana_program::pubkey::Pubkey>,
209                mint_a: Option<solana_program::pubkey::Pubkey>,
210                mint_b: Option<solana_program::pubkey::Pubkey>,
211                token_program_a: Option<solana_program::pubkey::Pubkey>,
212                token_program_b: Option<solana_program::pubkey::Pubkey>,
213                tuna_position: Option<solana_program::pubkey::Pubkey>,
214                tuna_position_ata: Option<solana_program::pubkey::Pubkey>,
215                tuna_position_ata_a: Option<solana_program::pubkey::Pubkey>,
216                tuna_position_ata_b: Option<solana_program::pubkey::Pubkey>,
217                tuna_position_owner_ata_a: Option<solana_program::pubkey::Pubkey>,
218                tuna_position_owner_ata_b: Option<solana_program::pubkey::Pubkey>,
219                fusionamm_program: Option<solana_program::pubkey::Pubkey>,
220                fusion_pool: Option<solana_program::pubkey::Pubkey>,
221                fusion_position: Option<solana_program::pubkey::Pubkey>,
222                memo_program: Option<solana_program::pubkey::Pubkey>,
223                        remaining_accounts_info: Option<RemainingAccountsInfo>,
224        __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
225}
226
227impl CollectFeesFusionBuilder {
228  pub fn new() -> Self {
229    Self::default()
230  }
231            /// 
232/// TUNA accounts
233/// 
234#[inline(always)]
235    pub fn authority(&mut self, authority: solana_program::pubkey::Pubkey) -> &mut Self {
236                        self.authority = Some(authority);
237                    self
238    }
239            #[inline(always)]
240    pub fn tuna_config(&mut self, tuna_config: solana_program::pubkey::Pubkey) -> &mut Self {
241                        self.tuna_config = Some(tuna_config);
242                    self
243    }
244            #[inline(always)]
245    pub fn mint_a(&mut self, mint_a: solana_program::pubkey::Pubkey) -> &mut Self {
246                        self.mint_a = Some(mint_a);
247                    self
248    }
249            #[inline(always)]
250    pub fn mint_b(&mut self, mint_b: solana_program::pubkey::Pubkey) -> &mut Self {
251                        self.mint_b = Some(mint_b);
252                    self
253    }
254            #[inline(always)]
255    pub fn token_program_a(&mut self, token_program_a: solana_program::pubkey::Pubkey) -> &mut Self {
256                        self.token_program_a = Some(token_program_a);
257                    self
258    }
259            #[inline(always)]
260    pub fn token_program_b(&mut self, token_program_b: solana_program::pubkey::Pubkey) -> &mut Self {
261                        self.token_program_b = Some(token_program_b);
262                    self
263    }
264            #[inline(always)]
265    pub fn tuna_position(&mut self, tuna_position: solana_program::pubkey::Pubkey) -> &mut Self {
266                        self.tuna_position = Some(tuna_position);
267                    self
268    }
269            #[inline(always)]
270    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_program::pubkey::Pubkey) -> &mut Self {
271                        self.tuna_position_ata = Some(tuna_position_ata);
272                    self
273    }
274            #[inline(always)]
275    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
276                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
277                    self
278    }
279            #[inline(always)]
280    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
281                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
282                    self
283    }
284            #[inline(always)]
285    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
286                        self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
287                    self
288    }
289            #[inline(always)]
290    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
291                        self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
292                    self
293    }
294            /// 
295/// Fusion accounts
296/// 
297#[inline(always)]
298    pub fn fusionamm_program(&mut self, fusionamm_program: solana_program::pubkey::Pubkey) -> &mut Self {
299                        self.fusionamm_program = Some(fusionamm_program);
300                    self
301    }
302            #[inline(always)]
303    pub fn fusion_pool(&mut self, fusion_pool: solana_program::pubkey::Pubkey) -> &mut Self {
304                        self.fusion_pool = Some(fusion_pool);
305                    self
306    }
307            #[inline(always)]
308    pub fn fusion_position(&mut self, fusion_position: solana_program::pubkey::Pubkey) -> &mut Self {
309                        self.fusion_position = Some(fusion_position);
310                    self
311    }
312            #[inline(always)]
313    pub fn memo_program(&mut self, memo_program: solana_program::pubkey::Pubkey) -> &mut Self {
314                        self.memo_program = Some(memo_program);
315                    self
316    }
317                    #[inline(always)]
318      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
319        self.remaining_accounts_info = Some(remaining_accounts_info);
320        self
321      }
322        /// Add an additional account to the instruction.
323  #[inline(always)]
324  pub fn add_remaining_account(&mut self, account: solana_program::instruction::AccountMeta) -> &mut Self {
325    self.__remaining_accounts.push(account);
326    self
327  }
328  /// Add additional accounts to the instruction.
329  #[inline(always)]
330  pub fn add_remaining_accounts(&mut self, accounts: &[solana_program::instruction::AccountMeta]) -> &mut Self {
331    self.__remaining_accounts.extend_from_slice(accounts);
332    self
333  }
334  #[allow(clippy::clone_on_copy)]
335  pub fn instruction(&self) -> solana_program::instruction::Instruction {
336    let accounts = CollectFeesFusion {
337                              authority: self.authority.expect("authority is not set"),
338                                        tuna_config: self.tuna_config.expect("tuna_config is not set"),
339                                        mint_a: self.mint_a.expect("mint_a is not set"),
340                                        mint_b: self.mint_b.expect("mint_b is not set"),
341                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
342                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
343                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
344                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
345                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
346                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
347                                        tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
348                                        tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
349                                        fusionamm_program: self.fusionamm_program.expect("fusionamm_program is not set"),
350                                        fusion_pool: self.fusion_pool.expect("fusion_pool is not set"),
351                                        fusion_position: self.fusion_position.expect("fusion_position is not set"),
352                                        memo_program: self.memo_program.expect("memo_program is not set"),
353                      };
354          let args = CollectFeesFusionInstructionArgs {
355                                                              remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
356                                    };
357    
358    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
359  }
360}
361
362  /// `collect_fees_fusion` CPI accounts.
363  pub struct CollectFeesFusionCpiAccounts<'a, 'b> {
364                  /// 
365/// TUNA accounts
366/// 
367
368      
369                    
370              pub authority: &'b solana_program::account_info::AccountInfo<'a>,
371                
372                    
373              pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
374                
375                    
376              pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
377                
378                    
379              pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
380                
381                    
382              pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
383                
384                    
385              pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
386                
387                    
388              pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
389                
390                    
391              pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
392                
393                    
394              pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
395                
396                    
397              pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
398                
399                    
400              pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
401                
402                    
403              pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
404                        /// 
405/// Fusion accounts
406/// 
407
408      
409                    
410              pub fusionamm_program: &'b solana_program::account_info::AccountInfo<'a>,
411                
412                    
413              pub fusion_pool: &'b solana_program::account_info::AccountInfo<'a>,
414                
415                    
416              pub fusion_position: &'b solana_program::account_info::AccountInfo<'a>,
417                
418                    
419              pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
420            }
421
422/// `collect_fees_fusion` CPI instruction.
423pub struct CollectFeesFusionCpi<'a, 'b> {
424  /// The program to invoke.
425  pub __program: &'b solana_program::account_info::AccountInfo<'a>,
426            /// 
427/// TUNA accounts
428/// 
429
430    
431              
432          pub authority: &'b solana_program::account_info::AccountInfo<'a>,
433          
434              
435          pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
436          
437              
438          pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
439          
440              
441          pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
442          
443              
444          pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
445          
446              
447          pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
448          
449              
450          pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
451          
452              
453          pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
454          
455              
456          pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
457          
458              
459          pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
460          
461              
462          pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
463          
464              
465          pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
466                /// 
467/// Fusion accounts
468/// 
469
470    
471              
472          pub fusionamm_program: &'b solana_program::account_info::AccountInfo<'a>,
473          
474              
475          pub fusion_pool: &'b solana_program::account_info::AccountInfo<'a>,
476          
477              
478          pub fusion_position: &'b solana_program::account_info::AccountInfo<'a>,
479          
480              
481          pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
482            /// The arguments for the instruction.
483    pub __args: CollectFeesFusionInstructionArgs,
484  }
485
486impl<'a, 'b> CollectFeesFusionCpi<'a, 'b> {
487  pub fn new(
488    program: &'b solana_program::account_info::AccountInfo<'a>,
489          accounts: CollectFeesFusionCpiAccounts<'a, 'b>,
490              args: CollectFeesFusionInstructionArgs,
491      ) -> Self {
492    Self {
493      __program: program,
494              authority: accounts.authority,
495              tuna_config: accounts.tuna_config,
496              mint_a: accounts.mint_a,
497              mint_b: accounts.mint_b,
498              token_program_a: accounts.token_program_a,
499              token_program_b: accounts.token_program_b,
500              tuna_position: accounts.tuna_position,
501              tuna_position_ata: accounts.tuna_position_ata,
502              tuna_position_ata_a: accounts.tuna_position_ata_a,
503              tuna_position_ata_b: accounts.tuna_position_ata_b,
504              tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
505              tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
506              fusionamm_program: accounts.fusionamm_program,
507              fusion_pool: accounts.fusion_pool,
508              fusion_position: accounts.fusion_position,
509              memo_program: accounts.memo_program,
510                    __args: args,
511          }
512  }
513  #[inline(always)]
514  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
515    self.invoke_signed_with_remaining_accounts(&[], &[])
516  }
517  #[inline(always)]
518  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> solana_program::entrypoint::ProgramResult {
519    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
520  }
521  #[inline(always)]
522  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
523    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
524  }
525  #[allow(clippy::arithmetic_side_effects)]
526  #[allow(clippy::clone_on_copy)]
527  #[allow(clippy::vec_init_then_push)]
528  pub fn invoke_signed_with_remaining_accounts(
529    &self,
530    signers_seeds: &[&[&[u8]]],
531    remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]
532  ) -> solana_program::entrypoint::ProgramResult {
533    let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
534                            accounts.push(solana_program::instruction::AccountMeta::new(
535            *self.authority.key,
536            true
537          ));
538                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
539            *self.tuna_config.key,
540            false
541          ));
542                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
543            *self.mint_a.key,
544            false
545          ));
546                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
547            *self.mint_b.key,
548            false
549          ));
550                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
551            *self.token_program_a.key,
552            false
553          ));
554                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
555            *self.token_program_b.key,
556            false
557          ));
558                                          accounts.push(solana_program::instruction::AccountMeta::new(
559            *self.tuna_position.key,
560            false
561          ));
562                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
563            *self.tuna_position_ata.key,
564            false
565          ));
566                                          accounts.push(solana_program::instruction::AccountMeta::new(
567            *self.tuna_position_ata_a.key,
568            false
569          ));
570                                          accounts.push(solana_program::instruction::AccountMeta::new(
571            *self.tuna_position_ata_b.key,
572            false
573          ));
574                                          accounts.push(solana_program::instruction::AccountMeta::new(
575            *self.tuna_position_owner_ata_a.key,
576            false
577          ));
578                                          accounts.push(solana_program::instruction::AccountMeta::new(
579            *self.tuna_position_owner_ata_b.key,
580            false
581          ));
582                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
583            *self.fusionamm_program.key,
584            false
585          ));
586                                          accounts.push(solana_program::instruction::AccountMeta::new(
587            *self.fusion_pool.key,
588            false
589          ));
590                                          accounts.push(solana_program::instruction::AccountMeta::new(
591            *self.fusion_position.key,
592            false
593          ));
594                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
595            *self.memo_program.key,
596            false
597          ));
598                      remaining_accounts.iter().for_each(|remaining_account| {
599      accounts.push(solana_program::instruction::AccountMeta {
600          pubkey: *remaining_account.0.key,
601          is_signer: remaining_account.1,
602          is_writable: remaining_account.2,
603      })
604    });
605    let mut data = borsh::to_vec(&CollectFeesFusionInstructionData::new()).unwrap();
606          let mut args = borsh::to_vec(&self.__args).unwrap();
607      data.append(&mut args);
608    
609    let instruction = solana_program::instruction::Instruction {
610      program_id: crate::TUNA_ID,
611      accounts,
612      data,
613    };
614    let mut account_infos = Vec::with_capacity(17 + remaining_accounts.len());
615    account_infos.push(self.__program.clone());
616                  account_infos.push(self.authority.clone());
617                        account_infos.push(self.tuna_config.clone());
618                        account_infos.push(self.mint_a.clone());
619                        account_infos.push(self.mint_b.clone());
620                        account_infos.push(self.token_program_a.clone());
621                        account_infos.push(self.token_program_b.clone());
622                        account_infos.push(self.tuna_position.clone());
623                        account_infos.push(self.tuna_position_ata.clone());
624                        account_infos.push(self.tuna_position_ata_a.clone());
625                        account_infos.push(self.tuna_position_ata_b.clone());
626                        account_infos.push(self.tuna_position_owner_ata_a.clone());
627                        account_infos.push(self.tuna_position_owner_ata_b.clone());
628                        account_infos.push(self.fusionamm_program.clone());
629                        account_infos.push(self.fusion_pool.clone());
630                        account_infos.push(self.fusion_position.clone());
631                        account_infos.push(self.memo_program.clone());
632              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
633
634    if signers_seeds.is_empty() {
635      solana_program::program::invoke(&instruction, &account_infos)
636    } else {
637      solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
638    }
639  }
640}
641
642/// Instruction builder for `CollectFeesFusion` via CPI.
643///
644/// ### Accounts:
645///
646                      ///   0. `[writable, signer]` authority
647          ///   1. `[]` tuna_config
648          ///   2. `[]` mint_a
649          ///   3. `[]` mint_b
650          ///   4. `[]` token_program_a
651          ///   5. `[]` token_program_b
652                ///   6. `[writable]` tuna_position
653          ///   7. `[]` tuna_position_ata
654                ///   8. `[writable]` tuna_position_ata_a
655                ///   9. `[writable]` tuna_position_ata_b
656                ///   10. `[writable]` tuna_position_owner_ata_a
657                ///   11. `[writable]` tuna_position_owner_ata_b
658          ///   12. `[]` fusionamm_program
659                ///   13. `[writable]` fusion_pool
660                ///   14. `[writable]` fusion_position
661          ///   15. `[]` memo_program
662#[derive(Clone, Debug)]
663pub struct CollectFeesFusionCpiBuilder<'a, 'b> {
664  instruction: Box<CollectFeesFusionCpiBuilderInstruction<'a, 'b>>,
665}
666
667impl<'a, 'b> CollectFeesFusionCpiBuilder<'a, 'b> {
668  pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
669    let instruction = Box::new(CollectFeesFusionCpiBuilderInstruction {
670      __program: program,
671              authority: None,
672              tuna_config: None,
673              mint_a: None,
674              mint_b: None,
675              token_program_a: None,
676              token_program_b: None,
677              tuna_position: None,
678              tuna_position_ata: None,
679              tuna_position_ata_a: None,
680              tuna_position_ata_b: None,
681              tuna_position_owner_ata_a: None,
682              tuna_position_owner_ata_b: None,
683              fusionamm_program: None,
684              fusion_pool: None,
685              fusion_position: None,
686              memo_program: None,
687                                            remaining_accounts_info: None,
688                    __remaining_accounts: Vec::new(),
689    });
690    Self { instruction }
691  }
692      /// 
693/// TUNA accounts
694/// 
695#[inline(always)]
696    pub fn authority(&mut self, authority: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
697                        self.instruction.authority = Some(authority);
698                    self
699    }
700      #[inline(always)]
701    pub fn tuna_config(&mut self, tuna_config: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
702                        self.instruction.tuna_config = Some(tuna_config);
703                    self
704    }
705      #[inline(always)]
706    pub fn mint_a(&mut self, mint_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
707                        self.instruction.mint_a = Some(mint_a);
708                    self
709    }
710      #[inline(always)]
711    pub fn mint_b(&mut self, mint_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
712                        self.instruction.mint_b = Some(mint_b);
713                    self
714    }
715      #[inline(always)]
716    pub fn token_program_a(&mut self, token_program_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
717                        self.instruction.token_program_a = Some(token_program_a);
718                    self
719    }
720      #[inline(always)]
721    pub fn token_program_b(&mut self, token_program_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
722                        self.instruction.token_program_b = Some(token_program_b);
723                    self
724    }
725      #[inline(always)]
726    pub fn tuna_position(&mut self, tuna_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
727                        self.instruction.tuna_position = Some(tuna_position);
728                    self
729    }
730      #[inline(always)]
731    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
732                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
733                    self
734    }
735      #[inline(always)]
736    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
737                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
738                    self
739    }
740      #[inline(always)]
741    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
742                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
743                    self
744    }
745      #[inline(always)]
746    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
747                        self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
748                    self
749    }
750      #[inline(always)]
751    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
752                        self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
753                    self
754    }
755      /// 
756/// Fusion accounts
757/// 
758#[inline(always)]
759    pub fn fusionamm_program(&mut self, fusionamm_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
760                        self.instruction.fusionamm_program = Some(fusionamm_program);
761                    self
762    }
763      #[inline(always)]
764    pub fn fusion_pool(&mut self, fusion_pool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
765                        self.instruction.fusion_pool = Some(fusion_pool);
766                    self
767    }
768      #[inline(always)]
769    pub fn fusion_position(&mut self, fusion_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
770                        self.instruction.fusion_position = Some(fusion_position);
771                    self
772    }
773      #[inline(always)]
774    pub fn memo_program(&mut self, memo_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
775                        self.instruction.memo_program = Some(memo_program);
776                    self
777    }
778                    #[inline(always)]
779      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
780        self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
781        self
782      }
783        /// Add an additional account to the instruction.
784  #[inline(always)]
785  pub fn add_remaining_account(&mut self, account: &'b solana_program::account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
786    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
787    self
788  }
789  /// Add additional accounts to the instruction.
790  ///
791  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
792  /// and a `bool` indicating whether the account is a signer or not.
793  #[inline(always)]
794  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
795    self.instruction.__remaining_accounts.extend_from_slice(accounts);
796    self
797  }
798  #[inline(always)]
799  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
800    self.invoke_signed(&[])
801  }
802  #[allow(clippy::clone_on_copy)]
803  #[allow(clippy::vec_init_then_push)]
804  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
805          let args = CollectFeesFusionInstructionArgs {
806                                                              remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
807                                    };
808        let instruction = CollectFeesFusionCpi {
809        __program: self.instruction.__program,
810                  
811          authority: self.instruction.authority.expect("authority is not set"),
812                  
813          tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
814                  
815          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
816                  
817          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
818                  
819          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
820                  
821          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
822                  
823          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
824                  
825          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
826                  
827          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
828                  
829          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
830                  
831          tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
832                  
833          tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
834                  
835          fusionamm_program: self.instruction.fusionamm_program.expect("fusionamm_program is not set"),
836                  
837          fusion_pool: self.instruction.fusion_pool.expect("fusion_pool is not set"),
838                  
839          fusion_position: self.instruction.fusion_position.expect("fusion_position is not set"),
840                  
841          memo_program: self.instruction.memo_program.expect("memo_program is not set"),
842                          __args: args,
843            };
844    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
845  }
846}
847
848#[derive(Clone, Debug)]
849struct CollectFeesFusionCpiBuilderInstruction<'a, 'b> {
850  __program: &'b solana_program::account_info::AccountInfo<'a>,
851            authority: Option<&'b solana_program::account_info::AccountInfo<'a>>,
852                tuna_config: Option<&'b solana_program::account_info::AccountInfo<'a>>,
853                mint_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
854                mint_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
855                token_program_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
856                token_program_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
857                tuna_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
858                tuna_position_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
859                tuna_position_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
860                tuna_position_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
861                tuna_position_owner_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
862                tuna_position_owner_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
863                fusionamm_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
864                fusion_pool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
865                fusion_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
866                memo_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
867                        remaining_accounts_info: Option<RemainingAccountsInfo>,
868        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
869  __remaining_accounts: Vec<(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)>,
870}
871