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