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