Skip to main content

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