defituna_client/generated/instructions/
collect_fees_orca.rs

1//! This code was AUTOGENERATED using the codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7
8use crate::generated::types::RemainingAccountsInfo;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12/// Accounts.
13#[derive(Debug)]
14pub struct CollectFeesOrca {
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 tuna_position: solana_program::pubkey::Pubkey,
34          
35              
36          pub tuna_position_ata: solana_program::pubkey::Pubkey,
37          
38              
39          pub tuna_position_ata_a: solana_program::pubkey::Pubkey,
40          
41              
42          pub tuna_position_ata_b: solana_program::pubkey::Pubkey,
43          
44              
45          pub tuna_position_owner_ata_a: solana_program::pubkey::Pubkey,
46          
47              
48          pub tuna_position_owner_ata_b: solana_program::pubkey::Pubkey,
49                /// 
50/// ORCA accounts
51/// 
52
53    
54              
55          pub whirlpool_program: solana_program::pubkey::Pubkey,
56          
57              
58          pub whirlpool: solana_program::pubkey::Pubkey,
59          
60              
61          pub orca_position: solana_program::pubkey::Pubkey,
62          
63              
64          pub token_program_a: solana_program::pubkey::Pubkey,
65          
66              
67          pub token_program_b: solana_program::pubkey::Pubkey,
68          
69              
70          pub memo_program: solana_program::pubkey::Pubkey,
71      }
72
73impl CollectFeesOrca {
74  pub fn instruction(&self, args: CollectFeesOrcaInstructionArgs) -> 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: CollectFeesOrcaInstructionArgs, 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(
98            self.tuna_position,
99            false
100          ));
101                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
102            self.tuna_position_ata,
103            false
104          ));
105                                          accounts.push(solana_program::instruction::AccountMeta::new(
106            self.tuna_position_ata_a,
107            false
108          ));
109                                          accounts.push(solana_program::instruction::AccountMeta::new(
110            self.tuna_position_ata_b,
111            false
112          ));
113                                          accounts.push(solana_program::instruction::AccountMeta::new(
114            self.tuna_position_owner_ata_a,
115            false
116          ));
117                                          accounts.push(solana_program::instruction::AccountMeta::new(
118            self.tuna_position_owner_ata_b,
119            false
120          ));
121                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
122            self.whirlpool_program,
123            false
124          ));
125                                          accounts.push(solana_program::instruction::AccountMeta::new(
126            self.whirlpool,
127            false
128          ));
129                                          accounts.push(solana_program::instruction::AccountMeta::new(
130            self.orca_position,
131            false
132          ));
133                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
134            self.token_program_a,
135            false
136          ));
137                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
138            self.token_program_b,
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(&CollectFeesOrcaInstructionData::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 CollectFeesOrcaInstructionData {
161            discriminator: [u8; 8],
162            }
163
164impl CollectFeesOrcaInstructionData {
165  pub fn new() -> Self {
166    Self {
167                        discriminator: [147, 188, 191, 37, 255, 10, 239, 76],
168                                }
169  }
170}
171
172impl Default for CollectFeesOrcaInstructionData {
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 CollectFeesOrcaInstructionArgs {
181                  pub remaining_accounts_info: RemainingAccountsInfo,
182      }
183
184
185/// Instruction builder for `CollectFeesOrca`.
186///
187/// ### Accounts:
188///
189                      ///   0. `[writable, signer]` authority
190          ///   1. `[]` tuna_config
191          ///   2. `[]` mint_a
192          ///   3. `[]` mint_b
193                ///   4. `[writable]` tuna_position
194          ///   5. `[]` tuna_position_ata
195                ///   6. `[writable]` tuna_position_ata_a
196                ///   7. `[writable]` tuna_position_ata_b
197                ///   8. `[writable]` tuna_position_owner_ata_a
198                ///   9. `[writable]` tuna_position_owner_ata_b
199          ///   10. `[]` whirlpool_program
200                ///   11. `[writable]` whirlpool
201                ///   12. `[writable]` orca_position
202          ///   13. `[]` token_program_a
203          ///   14. `[]` token_program_b
204          ///   15. `[]` memo_program
205#[derive(Clone, Debug, Default)]
206pub struct CollectFeesOrcaBuilder {
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                tuna_position: Option<solana_program::pubkey::Pubkey>,
212                tuna_position_ata: Option<solana_program::pubkey::Pubkey>,
213                tuna_position_ata_a: Option<solana_program::pubkey::Pubkey>,
214                tuna_position_ata_b: Option<solana_program::pubkey::Pubkey>,
215                tuna_position_owner_ata_a: Option<solana_program::pubkey::Pubkey>,
216                tuna_position_owner_ata_b: Option<solana_program::pubkey::Pubkey>,
217                whirlpool_program: Option<solana_program::pubkey::Pubkey>,
218                whirlpool: Option<solana_program::pubkey::Pubkey>,
219                orca_position: Option<solana_program::pubkey::Pubkey>,
220                token_program_a: Option<solana_program::pubkey::Pubkey>,
221                token_program_b: 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 CollectFeesOrcaBuilder {
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 tuna_position(&mut self, tuna_position: solana_program::pubkey::Pubkey) -> &mut Self {
256                        self.tuna_position = Some(tuna_position);
257                    self
258    }
259            #[inline(always)]
260    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_program::pubkey::Pubkey) -> &mut Self {
261                        self.tuna_position_ata = Some(tuna_position_ata);
262                    self
263    }
264            #[inline(always)]
265    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
266                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
267                    self
268    }
269            #[inline(always)]
270    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
271                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
272                    self
273    }
274            #[inline(always)]
275    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
276                        self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
277                    self
278    }
279            #[inline(always)]
280    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
281                        self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
282                    self
283    }
284            /// 
285/// ORCA accounts
286/// 
287#[inline(always)]
288    pub fn whirlpool_program(&mut self, whirlpool_program: solana_program::pubkey::Pubkey) -> &mut Self {
289                        self.whirlpool_program = Some(whirlpool_program);
290                    self
291    }
292            #[inline(always)]
293    pub fn whirlpool(&mut self, whirlpool: solana_program::pubkey::Pubkey) -> &mut Self {
294                        self.whirlpool = Some(whirlpool);
295                    self
296    }
297            #[inline(always)]
298    pub fn orca_position(&mut self, orca_position: solana_program::pubkey::Pubkey) -> &mut Self {
299                        self.orca_position = Some(orca_position);
300                    self
301    }
302            #[inline(always)]
303    pub fn token_program_a(&mut self, token_program_a: solana_program::pubkey::Pubkey) -> &mut Self {
304                        self.token_program_a = Some(token_program_a);
305                    self
306    }
307            #[inline(always)]
308    pub fn token_program_b(&mut self, token_program_b: solana_program::pubkey::Pubkey) -> &mut Self {
309                        self.token_program_b = Some(token_program_b);
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 = CollectFeesOrca {
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                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
342                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
343                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
344                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
345                                        tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
346                                        tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
347                                        whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
348                                        whirlpool: self.whirlpool.expect("whirlpool is not set"),
349                                        orca_position: self.orca_position.expect("orca_position is not set"),
350                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
351                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
352                                        memo_program: self.memo_program.expect("memo_program is not set"),
353                      };
354          let args = CollectFeesOrcaInstructionArgs {
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_orca` CPI accounts.
363  pub struct CollectFeesOrcaCpiAccounts<'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 tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
383                
384                    
385              pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
386                
387                    
388              pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
389                
390                    
391              pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
392                
393                    
394              pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
395                
396                    
397              pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
398                        /// 
399/// ORCA accounts
400/// 
401
402      
403                    
404              pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
405                
406                    
407              pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
408                
409                    
410              pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
411                
412                    
413              pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
414                
415                    
416              pub token_program_b: &'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_orca` CPI instruction.
423pub struct CollectFeesOrcaCpi<'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 tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
445          
446              
447          pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
448          
449              
450          pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
451          
452              
453          pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
454          
455              
456          pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
457          
458              
459          pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
460                /// 
461/// ORCA accounts
462/// 
463
464    
465              
466          pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
467          
468              
469          pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
470          
471              
472          pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
473          
474              
475          pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
476          
477              
478          pub token_program_b: &'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: CollectFeesOrcaInstructionArgs,
484  }
485
486impl<'a, 'b> CollectFeesOrcaCpi<'a, 'b> {
487  pub fn new(
488    program: &'b solana_program::account_info::AccountInfo<'a>,
489          accounts: CollectFeesOrcaCpiAccounts<'a, 'b>,
490              args: CollectFeesOrcaInstructionArgs,
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              tuna_position: accounts.tuna_position,
499              tuna_position_ata: accounts.tuna_position_ata,
500              tuna_position_ata_a: accounts.tuna_position_ata_a,
501              tuna_position_ata_b: accounts.tuna_position_ata_b,
502              tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
503              tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
504              whirlpool_program: accounts.whirlpool_program,
505              whirlpool: accounts.whirlpool,
506              orca_position: accounts.orca_position,
507              token_program_a: accounts.token_program_a,
508              token_program_b: accounts.token_program_b,
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(
551            *self.tuna_position.key,
552            false
553          ));
554                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
555            *self.tuna_position_ata.key,
556            false
557          ));
558                                          accounts.push(solana_program::instruction::AccountMeta::new(
559            *self.tuna_position_ata_a.key,
560            false
561          ));
562                                          accounts.push(solana_program::instruction::AccountMeta::new(
563            *self.tuna_position_ata_b.key,
564            false
565          ));
566                                          accounts.push(solana_program::instruction::AccountMeta::new(
567            *self.tuna_position_owner_ata_a.key,
568            false
569          ));
570                                          accounts.push(solana_program::instruction::AccountMeta::new(
571            *self.tuna_position_owner_ata_b.key,
572            false
573          ));
574                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
575            *self.whirlpool_program.key,
576            false
577          ));
578                                          accounts.push(solana_program::instruction::AccountMeta::new(
579            *self.whirlpool.key,
580            false
581          ));
582                                          accounts.push(solana_program::instruction::AccountMeta::new(
583            *self.orca_position.key,
584            false
585          ));
586                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
587            *self.token_program_a.key,
588            false
589          ));
590                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
591            *self.token_program_b.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(&CollectFeesOrcaInstructionData::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.tuna_position.clone());
621                        account_infos.push(self.tuna_position_ata.clone());
622                        account_infos.push(self.tuna_position_ata_a.clone());
623                        account_infos.push(self.tuna_position_ata_b.clone());
624                        account_infos.push(self.tuna_position_owner_ata_a.clone());
625                        account_infos.push(self.tuna_position_owner_ata_b.clone());
626                        account_infos.push(self.whirlpool_program.clone());
627                        account_infos.push(self.whirlpool.clone());
628                        account_infos.push(self.orca_position.clone());
629                        account_infos.push(self.token_program_a.clone());
630                        account_infos.push(self.token_program_b.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 `CollectFeesOrca` 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. `[writable]` tuna_position
651          ///   5. `[]` tuna_position_ata
652                ///   6. `[writable]` tuna_position_ata_a
653                ///   7. `[writable]` tuna_position_ata_b
654                ///   8. `[writable]` tuna_position_owner_ata_a
655                ///   9. `[writable]` tuna_position_owner_ata_b
656          ///   10. `[]` whirlpool_program
657                ///   11. `[writable]` whirlpool
658                ///   12. `[writable]` orca_position
659          ///   13. `[]` token_program_a
660          ///   14. `[]` token_program_b
661          ///   15. `[]` memo_program
662#[derive(Clone, Debug)]
663pub struct CollectFeesOrcaCpiBuilder<'a, 'b> {
664  instruction: Box<CollectFeesOrcaCpiBuilderInstruction<'a, 'b>>,
665}
666
667impl<'a, 'b> CollectFeesOrcaCpiBuilder<'a, 'b> {
668  pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
669    let instruction = Box::new(CollectFeesOrcaCpiBuilderInstruction {
670      __program: program,
671              authority: None,
672              tuna_config: None,
673              mint_a: None,
674              mint_b: None,
675              tuna_position: None,
676              tuna_position_ata: None,
677              tuna_position_ata_a: None,
678              tuna_position_ata_b: None,
679              tuna_position_owner_ata_a: None,
680              tuna_position_owner_ata_b: None,
681              whirlpool_program: None,
682              whirlpool: None,
683              orca_position: None,
684              token_program_a: None,
685              token_program_b: 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 tuna_position(&mut self, tuna_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
717                        self.instruction.tuna_position = Some(tuna_position);
718                    self
719    }
720      #[inline(always)]
721    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
722                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
723                    self
724    }
725      #[inline(always)]
726    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
727                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
728                    self
729    }
730      #[inline(always)]
731    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
732                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
733                    self
734    }
735      #[inline(always)]
736    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
737                        self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
738                    self
739    }
740      #[inline(always)]
741    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
742                        self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
743                    self
744    }
745      /// 
746/// ORCA accounts
747/// 
748#[inline(always)]
749    pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
750                        self.instruction.whirlpool_program = Some(whirlpool_program);
751                    self
752    }
753      #[inline(always)]
754    pub fn whirlpool(&mut self, whirlpool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
755                        self.instruction.whirlpool = Some(whirlpool);
756                    self
757    }
758      #[inline(always)]
759    pub fn orca_position(&mut self, orca_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
760                        self.instruction.orca_position = Some(orca_position);
761                    self
762    }
763      #[inline(always)]
764    pub fn token_program_a(&mut self, token_program_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
765                        self.instruction.token_program_a = Some(token_program_a);
766                    self
767    }
768      #[inline(always)]
769    pub fn token_program_b(&mut self, token_program_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
770                        self.instruction.token_program_b = Some(token_program_b);
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 = CollectFeesOrcaInstructionArgs {
806                                                              remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
807                                    };
808        let instruction = CollectFeesOrcaCpi {
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          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
820                  
821          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
822                  
823          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
824                  
825          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
826                  
827          tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
828                  
829          tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
830                  
831          whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
832                  
833          whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
834                  
835          orca_position: self.instruction.orca_position.expect("orca_position is not set"),
836                  
837          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
838                  
839          token_program_b: self.instruction.token_program_b.expect("token_program_b 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 CollectFeesOrcaCpiBuilderInstruction<'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                tuna_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
856                tuna_position_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
857                tuna_position_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
858                tuna_position_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
859                tuna_position_owner_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
860                tuna_position_owner_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
861                whirlpool_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
862                whirlpool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
863                orca_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
864                token_program_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
865                token_program_b: 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