defituna_client/generated/instructions/
add_liquidity_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 AddLiquidityOrca {
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 market: solana_program::pubkey::Pubkey,
34          
35              
36          pub vault_a: solana_program::pubkey::Pubkey,
37          
38              
39          pub vault_b: solana_program::pubkey::Pubkey,
40          
41              
42          pub vault_a_ata: solana_program::pubkey::Pubkey,
43          
44              
45          pub vault_b_ata: solana_program::pubkey::Pubkey,
46          
47              
48          pub tuna_position: solana_program::pubkey::Pubkey,
49          
50              
51          pub tuna_position_ata: solana_program::pubkey::Pubkey,
52          
53              
54          pub tuna_position_ata_a: solana_program::pubkey::Pubkey,
55          
56              
57          pub tuna_position_ata_b: solana_program::pubkey::Pubkey,
58          
59              
60          pub tuna_position_owner_ata_a: solana_program::pubkey::Pubkey,
61          
62              
63          pub tuna_position_owner_ata_b: solana_program::pubkey::Pubkey,
64          
65              
66          pub fee_recipient_ata_a: solana_program::pubkey::Pubkey,
67          
68              
69          pub fee_recipient_ata_b: solana_program::pubkey::Pubkey,
70          
71              
72          pub pyth_oracle_price_feed_a: solana_program::pubkey::Pubkey,
73          
74              
75          pub pyth_oracle_price_feed_b: solana_program::pubkey::Pubkey,
76                /// 
77/// ORCA accounts
78/// 
79
80    
81              
82          pub whirlpool_program: solana_program::pubkey::Pubkey,
83          
84              
85          pub whirlpool: solana_program::pubkey::Pubkey,
86          
87              
88          pub orca_position: solana_program::pubkey::Pubkey,
89          
90              
91          pub token_program_a: solana_program::pubkey::Pubkey,
92          
93              
94          pub token_program_b: solana_program::pubkey::Pubkey,
95          
96              
97          pub memo_program: solana_program::pubkey::Pubkey,
98      }
99
100impl AddLiquidityOrca {
101  pub fn instruction(&self, args: AddLiquidityOrcaInstructionArgs) -> solana_program::instruction::Instruction {
102    self.instruction_with_remaining_accounts(args, &[])
103  }
104  #[allow(clippy::arithmetic_side_effects)]
105  #[allow(clippy::vec_init_then_push)]
106  pub fn instruction_with_remaining_accounts(&self, args: AddLiquidityOrcaInstructionArgs, remaining_accounts: &[solana_program::instruction::AccountMeta]) -> solana_program::instruction::Instruction {
107    let mut accounts = Vec::with_capacity(25+ remaining_accounts.len());
108                            accounts.push(solana_program::instruction::AccountMeta::new(
109            self.authority,
110            true
111          ));
112                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
113            self.tuna_config,
114            false
115          ));
116                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
117            self.mint_a,
118            false
119          ));
120                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
121            self.mint_b,
122            false
123          ));
124                                          accounts.push(solana_program::instruction::AccountMeta::new(
125            self.market,
126            false
127          ));
128                                          accounts.push(solana_program::instruction::AccountMeta::new(
129            self.vault_a,
130            false
131          ));
132                                          accounts.push(solana_program::instruction::AccountMeta::new(
133            self.vault_b,
134            false
135          ));
136                                          accounts.push(solana_program::instruction::AccountMeta::new(
137            self.vault_a_ata,
138            false
139          ));
140                                          accounts.push(solana_program::instruction::AccountMeta::new(
141            self.vault_b_ata,
142            false
143          ));
144                                          accounts.push(solana_program::instruction::AccountMeta::new(
145            self.tuna_position,
146            false
147          ));
148                                          accounts.push(solana_program::instruction::AccountMeta::new(
149            self.tuna_position_ata,
150            false
151          ));
152                                          accounts.push(solana_program::instruction::AccountMeta::new(
153            self.tuna_position_ata_a,
154            false
155          ));
156                                          accounts.push(solana_program::instruction::AccountMeta::new(
157            self.tuna_position_ata_b,
158            false
159          ));
160                                          accounts.push(solana_program::instruction::AccountMeta::new(
161            self.tuna_position_owner_ata_a,
162            false
163          ));
164                                          accounts.push(solana_program::instruction::AccountMeta::new(
165            self.tuna_position_owner_ata_b,
166            false
167          ));
168                                          accounts.push(solana_program::instruction::AccountMeta::new(
169            self.fee_recipient_ata_a,
170            false
171          ));
172                                          accounts.push(solana_program::instruction::AccountMeta::new(
173            self.fee_recipient_ata_b,
174            false
175          ));
176                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
177            self.pyth_oracle_price_feed_a,
178            false
179          ));
180                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
181            self.pyth_oracle_price_feed_b,
182            false
183          ));
184                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
185            self.whirlpool_program,
186            false
187          ));
188                                          accounts.push(solana_program::instruction::AccountMeta::new(
189            self.whirlpool,
190            false
191          ));
192                                          accounts.push(solana_program::instruction::AccountMeta::new(
193            self.orca_position,
194            false
195          ));
196                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
197            self.token_program_a,
198            false
199          ));
200                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
201            self.token_program_b,
202            false
203          ));
204                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
205            self.memo_program,
206            false
207          ));
208                      accounts.extend_from_slice(remaining_accounts);
209    let mut data = borsh::to_vec(&AddLiquidityOrcaInstructionData::new()).unwrap();
210          let mut args = borsh::to_vec(&args).unwrap();
211      data.append(&mut args);
212    
213    solana_program::instruction::Instruction {
214      program_id: crate::TUNA_ID,
215      accounts,
216      data,
217    }
218  }
219}
220
221#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
222#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
223 pub struct AddLiquidityOrcaInstructionData {
224            discriminator: [u8; 8],
225                                                      }
226
227impl AddLiquidityOrcaInstructionData {
228  pub fn new() -> Self {
229    Self {
230                        discriminator: [185, 68, 41, 204, 33, 179, 12, 78],
231                                                                                                                                  }
232  }
233}
234
235impl Default for AddLiquidityOrcaInstructionData {
236  fn default() -> Self {
237    Self::new()
238  }
239}
240
241#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
242#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
243 pub struct AddLiquidityOrcaInstructionArgs {
244                  pub collateral_a: u64,
245                pub collateral_b: u64,
246                pub borrow_a: u64,
247                pub borrow_b: u64,
248                pub min_added_amount_a: u64,
249                pub min_added_amount_b: u64,
250                pub max_swap_slippage: u32,
251                pub remaining_accounts_info: RemainingAccountsInfo,
252      }
253
254
255/// Instruction builder for `AddLiquidityOrca`.
256///
257/// ### Accounts:
258///
259                      ///   0. `[writable, signer]` authority
260          ///   1. `[]` tuna_config
261          ///   2. `[]` mint_a
262          ///   3. `[]` mint_b
263                ///   4. `[writable]` market
264                ///   5. `[writable]` vault_a
265                ///   6. `[writable]` vault_b
266                ///   7. `[writable]` vault_a_ata
267                ///   8. `[writable]` vault_b_ata
268                ///   9. `[writable]` tuna_position
269                ///   10. `[writable]` tuna_position_ata
270                ///   11. `[writable]` tuna_position_ata_a
271                ///   12. `[writable]` tuna_position_ata_b
272                ///   13. `[writable]` tuna_position_owner_ata_a
273                ///   14. `[writable]` tuna_position_owner_ata_b
274                ///   15. `[writable]` fee_recipient_ata_a
275                ///   16. `[writable]` fee_recipient_ata_b
276          ///   17. `[]` pyth_oracle_price_feed_a
277          ///   18. `[]` pyth_oracle_price_feed_b
278          ///   19. `[]` whirlpool_program
279                ///   20. `[writable]` whirlpool
280                ///   21. `[writable]` orca_position
281          ///   22. `[]` token_program_a
282          ///   23. `[]` token_program_b
283          ///   24. `[]` memo_program
284#[derive(Clone, Debug, Default)]
285pub struct AddLiquidityOrcaBuilder {
286            authority: Option<solana_program::pubkey::Pubkey>,
287                tuna_config: Option<solana_program::pubkey::Pubkey>,
288                mint_a: Option<solana_program::pubkey::Pubkey>,
289                mint_b: Option<solana_program::pubkey::Pubkey>,
290                market: Option<solana_program::pubkey::Pubkey>,
291                vault_a: Option<solana_program::pubkey::Pubkey>,
292                vault_b: Option<solana_program::pubkey::Pubkey>,
293                vault_a_ata: Option<solana_program::pubkey::Pubkey>,
294                vault_b_ata: Option<solana_program::pubkey::Pubkey>,
295                tuna_position: Option<solana_program::pubkey::Pubkey>,
296                tuna_position_ata: Option<solana_program::pubkey::Pubkey>,
297                tuna_position_ata_a: Option<solana_program::pubkey::Pubkey>,
298                tuna_position_ata_b: Option<solana_program::pubkey::Pubkey>,
299                tuna_position_owner_ata_a: Option<solana_program::pubkey::Pubkey>,
300                tuna_position_owner_ata_b: Option<solana_program::pubkey::Pubkey>,
301                fee_recipient_ata_a: Option<solana_program::pubkey::Pubkey>,
302                fee_recipient_ata_b: Option<solana_program::pubkey::Pubkey>,
303                pyth_oracle_price_feed_a: Option<solana_program::pubkey::Pubkey>,
304                pyth_oracle_price_feed_b: Option<solana_program::pubkey::Pubkey>,
305                whirlpool_program: Option<solana_program::pubkey::Pubkey>,
306                whirlpool: Option<solana_program::pubkey::Pubkey>,
307                orca_position: Option<solana_program::pubkey::Pubkey>,
308                token_program_a: Option<solana_program::pubkey::Pubkey>,
309                token_program_b: Option<solana_program::pubkey::Pubkey>,
310                memo_program: Option<solana_program::pubkey::Pubkey>,
311                        collateral_a: Option<u64>,
312                collateral_b: Option<u64>,
313                borrow_a: Option<u64>,
314                borrow_b: Option<u64>,
315                min_added_amount_a: Option<u64>,
316                min_added_amount_b: Option<u64>,
317                max_swap_slippage: Option<u32>,
318                remaining_accounts_info: Option<RemainingAccountsInfo>,
319        __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
320}
321
322impl AddLiquidityOrcaBuilder {
323  pub fn new() -> Self {
324    Self::default()
325  }
326            /// 
327/// TUNA accounts
328/// 
329#[inline(always)]
330    pub fn authority(&mut self, authority: solana_program::pubkey::Pubkey) -> &mut Self {
331                        self.authority = Some(authority);
332                    self
333    }
334            #[inline(always)]
335    pub fn tuna_config(&mut self, tuna_config: solana_program::pubkey::Pubkey) -> &mut Self {
336                        self.tuna_config = Some(tuna_config);
337                    self
338    }
339            #[inline(always)]
340    pub fn mint_a(&mut self, mint_a: solana_program::pubkey::Pubkey) -> &mut Self {
341                        self.mint_a = Some(mint_a);
342                    self
343    }
344            #[inline(always)]
345    pub fn mint_b(&mut self, mint_b: solana_program::pubkey::Pubkey) -> &mut Self {
346                        self.mint_b = Some(mint_b);
347                    self
348    }
349            #[inline(always)]
350    pub fn market(&mut self, market: solana_program::pubkey::Pubkey) -> &mut Self {
351                        self.market = Some(market);
352                    self
353    }
354            #[inline(always)]
355    pub fn vault_a(&mut self, vault_a: solana_program::pubkey::Pubkey) -> &mut Self {
356                        self.vault_a = Some(vault_a);
357                    self
358    }
359            #[inline(always)]
360    pub fn vault_b(&mut self, vault_b: solana_program::pubkey::Pubkey) -> &mut Self {
361                        self.vault_b = Some(vault_b);
362                    self
363    }
364            #[inline(always)]
365    pub fn vault_a_ata(&mut self, vault_a_ata: solana_program::pubkey::Pubkey) -> &mut Self {
366                        self.vault_a_ata = Some(vault_a_ata);
367                    self
368    }
369            #[inline(always)]
370    pub fn vault_b_ata(&mut self, vault_b_ata: solana_program::pubkey::Pubkey) -> &mut Self {
371                        self.vault_b_ata = Some(vault_b_ata);
372                    self
373    }
374            #[inline(always)]
375    pub fn tuna_position(&mut self, tuna_position: solana_program::pubkey::Pubkey) -> &mut Self {
376                        self.tuna_position = Some(tuna_position);
377                    self
378    }
379            #[inline(always)]
380    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_program::pubkey::Pubkey) -> &mut Self {
381                        self.tuna_position_ata = Some(tuna_position_ata);
382                    self
383    }
384            #[inline(always)]
385    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
386                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
387                    self
388    }
389            #[inline(always)]
390    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
391                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
392                    self
393    }
394            #[inline(always)]
395    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
396                        self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
397                    self
398    }
399            #[inline(always)]
400    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
401                        self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
402                    self
403    }
404            #[inline(always)]
405    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: solana_program::pubkey::Pubkey) -> &mut Self {
406                        self.fee_recipient_ata_a = Some(fee_recipient_ata_a);
407                    self
408    }
409            #[inline(always)]
410    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: solana_program::pubkey::Pubkey) -> &mut Self {
411                        self.fee_recipient_ata_b = Some(fee_recipient_ata_b);
412                    self
413    }
414            #[inline(always)]
415    pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: solana_program::pubkey::Pubkey) -> &mut Self {
416                        self.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
417                    self
418    }
419            #[inline(always)]
420    pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: solana_program::pubkey::Pubkey) -> &mut Self {
421                        self.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
422                    self
423    }
424            /// 
425/// ORCA accounts
426/// 
427#[inline(always)]
428    pub fn whirlpool_program(&mut self, whirlpool_program: solana_program::pubkey::Pubkey) -> &mut Self {
429                        self.whirlpool_program = Some(whirlpool_program);
430                    self
431    }
432            #[inline(always)]
433    pub fn whirlpool(&mut self, whirlpool: solana_program::pubkey::Pubkey) -> &mut Self {
434                        self.whirlpool = Some(whirlpool);
435                    self
436    }
437            #[inline(always)]
438    pub fn orca_position(&mut self, orca_position: solana_program::pubkey::Pubkey) -> &mut Self {
439                        self.orca_position = Some(orca_position);
440                    self
441    }
442            #[inline(always)]
443    pub fn token_program_a(&mut self, token_program_a: solana_program::pubkey::Pubkey) -> &mut Self {
444                        self.token_program_a = Some(token_program_a);
445                    self
446    }
447            #[inline(always)]
448    pub fn token_program_b(&mut self, token_program_b: solana_program::pubkey::Pubkey) -> &mut Self {
449                        self.token_program_b = Some(token_program_b);
450                    self
451    }
452            #[inline(always)]
453    pub fn memo_program(&mut self, memo_program: solana_program::pubkey::Pubkey) -> &mut Self {
454                        self.memo_program = Some(memo_program);
455                    self
456    }
457                    #[inline(always)]
458      pub fn collateral_a(&mut self, collateral_a: u64) -> &mut Self {
459        self.collateral_a = Some(collateral_a);
460        self
461      }
462                #[inline(always)]
463      pub fn collateral_b(&mut self, collateral_b: u64) -> &mut Self {
464        self.collateral_b = Some(collateral_b);
465        self
466      }
467                #[inline(always)]
468      pub fn borrow_a(&mut self, borrow_a: u64) -> &mut Self {
469        self.borrow_a = Some(borrow_a);
470        self
471      }
472                #[inline(always)]
473      pub fn borrow_b(&mut self, borrow_b: u64) -> &mut Self {
474        self.borrow_b = Some(borrow_b);
475        self
476      }
477                #[inline(always)]
478      pub fn min_added_amount_a(&mut self, min_added_amount_a: u64) -> &mut Self {
479        self.min_added_amount_a = Some(min_added_amount_a);
480        self
481      }
482                #[inline(always)]
483      pub fn min_added_amount_b(&mut self, min_added_amount_b: u64) -> &mut Self {
484        self.min_added_amount_b = Some(min_added_amount_b);
485        self
486      }
487                #[inline(always)]
488      pub fn max_swap_slippage(&mut self, max_swap_slippage: u32) -> &mut Self {
489        self.max_swap_slippage = Some(max_swap_slippage);
490        self
491      }
492                #[inline(always)]
493      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
494        self.remaining_accounts_info = Some(remaining_accounts_info);
495        self
496      }
497        /// Add an additional account to the instruction.
498  #[inline(always)]
499  pub fn add_remaining_account(&mut self, account: solana_program::instruction::AccountMeta) -> &mut Self {
500    self.__remaining_accounts.push(account);
501    self
502  }
503  /// Add additional accounts to the instruction.
504  #[inline(always)]
505  pub fn add_remaining_accounts(&mut self, accounts: &[solana_program::instruction::AccountMeta]) -> &mut Self {
506    self.__remaining_accounts.extend_from_slice(accounts);
507    self
508  }
509  #[allow(clippy::clone_on_copy)]
510  pub fn instruction(&self) -> solana_program::instruction::Instruction {
511    let accounts = AddLiquidityOrca {
512                              authority: self.authority.expect("authority is not set"),
513                                        tuna_config: self.tuna_config.expect("tuna_config is not set"),
514                                        mint_a: self.mint_a.expect("mint_a is not set"),
515                                        mint_b: self.mint_b.expect("mint_b is not set"),
516                                        market: self.market.expect("market is not set"),
517                                        vault_a: self.vault_a.expect("vault_a is not set"),
518                                        vault_b: self.vault_b.expect("vault_b is not set"),
519                                        vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
520                                        vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
521                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
522                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
523                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
524                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
525                                        tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
526                                        tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
527                                        fee_recipient_ata_a: self.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
528                                        fee_recipient_ata_b: self.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
529                                        pyth_oracle_price_feed_a: self.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
530                                        pyth_oracle_price_feed_b: self.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
531                                        whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
532                                        whirlpool: self.whirlpool.expect("whirlpool is not set"),
533                                        orca_position: self.orca_position.expect("orca_position is not set"),
534                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
535                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
536                                        memo_program: self.memo_program.expect("memo_program is not set"),
537                      };
538          let args = AddLiquidityOrcaInstructionArgs {
539                                                              collateral_a: self.collateral_a.clone().expect("collateral_a is not set"),
540                                                                  collateral_b: self.collateral_b.clone().expect("collateral_b is not set"),
541                                                                  borrow_a: self.borrow_a.clone().expect("borrow_a is not set"),
542                                                                  borrow_b: self.borrow_b.clone().expect("borrow_b is not set"),
543                                                                  min_added_amount_a: self.min_added_amount_a.clone().expect("min_added_amount_a is not set"),
544                                                                  min_added_amount_b: self.min_added_amount_b.clone().expect("min_added_amount_b is not set"),
545                                                                  max_swap_slippage: self.max_swap_slippage.clone().expect("max_swap_slippage is not set"),
546                                                                  remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
547                                    };
548    
549    accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
550  }
551}
552
553  /// `add_liquidity_orca` CPI accounts.
554  pub struct AddLiquidityOrcaCpiAccounts<'a, 'b> {
555                  /// 
556/// TUNA accounts
557/// 
558
559      
560                    
561              pub authority: &'b solana_program::account_info::AccountInfo<'a>,
562                
563                    
564              pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
565                
566                    
567              pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
568                
569                    
570              pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
571                
572                    
573              pub market: &'b solana_program::account_info::AccountInfo<'a>,
574                
575                    
576              pub vault_a: &'b solana_program::account_info::AccountInfo<'a>,
577                
578                    
579              pub vault_b: &'b solana_program::account_info::AccountInfo<'a>,
580                
581                    
582              pub vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>,
583                
584                    
585              pub vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>,
586                
587                    
588              pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
589                
590                    
591              pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
592                
593                    
594              pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
595                
596                    
597              pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
598                
599                    
600              pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
601                
602                    
603              pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
604                
605                    
606              pub fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
607                
608                    
609              pub fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
610                
611                    
612              pub pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>,
613                
614                    
615              pub pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>,
616                        /// 
617/// ORCA accounts
618/// 
619
620      
621                    
622              pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
623                
624                    
625              pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
626                
627                    
628              pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
629                
630                    
631              pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
632                
633                    
634              pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
635                
636                    
637              pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
638            }
639
640/// `add_liquidity_orca` CPI instruction.
641pub struct AddLiquidityOrcaCpi<'a, 'b> {
642  /// The program to invoke.
643  pub __program: &'b solana_program::account_info::AccountInfo<'a>,
644            /// 
645/// TUNA accounts
646/// 
647
648    
649              
650          pub authority: &'b solana_program::account_info::AccountInfo<'a>,
651          
652              
653          pub tuna_config: &'b solana_program::account_info::AccountInfo<'a>,
654          
655              
656          pub mint_a: &'b solana_program::account_info::AccountInfo<'a>,
657          
658              
659          pub mint_b: &'b solana_program::account_info::AccountInfo<'a>,
660          
661              
662          pub market: &'b solana_program::account_info::AccountInfo<'a>,
663          
664              
665          pub vault_a: &'b solana_program::account_info::AccountInfo<'a>,
666          
667              
668          pub vault_b: &'b solana_program::account_info::AccountInfo<'a>,
669          
670              
671          pub vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>,
672          
673              
674          pub vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>,
675          
676              
677          pub tuna_position: &'b solana_program::account_info::AccountInfo<'a>,
678          
679              
680          pub tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>,
681          
682              
683          pub tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
684          
685              
686          pub tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
687          
688              
689          pub tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
690          
691              
692          pub tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
693          
694              
695          pub fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>,
696          
697              
698          pub fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>,
699          
700              
701          pub pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>,
702          
703              
704          pub pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>,
705                /// 
706/// ORCA accounts
707/// 
708
709    
710              
711          pub whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>,
712          
713              
714          pub whirlpool: &'b solana_program::account_info::AccountInfo<'a>,
715          
716              
717          pub orca_position: &'b solana_program::account_info::AccountInfo<'a>,
718          
719              
720          pub token_program_a: &'b solana_program::account_info::AccountInfo<'a>,
721          
722              
723          pub token_program_b: &'b solana_program::account_info::AccountInfo<'a>,
724          
725              
726          pub memo_program: &'b solana_program::account_info::AccountInfo<'a>,
727            /// The arguments for the instruction.
728    pub __args: AddLiquidityOrcaInstructionArgs,
729  }
730
731impl<'a, 'b> AddLiquidityOrcaCpi<'a, 'b> {
732  pub fn new(
733    program: &'b solana_program::account_info::AccountInfo<'a>,
734          accounts: AddLiquidityOrcaCpiAccounts<'a, 'b>,
735              args: AddLiquidityOrcaInstructionArgs,
736      ) -> Self {
737    Self {
738      __program: program,
739              authority: accounts.authority,
740              tuna_config: accounts.tuna_config,
741              mint_a: accounts.mint_a,
742              mint_b: accounts.mint_b,
743              market: accounts.market,
744              vault_a: accounts.vault_a,
745              vault_b: accounts.vault_b,
746              vault_a_ata: accounts.vault_a_ata,
747              vault_b_ata: accounts.vault_b_ata,
748              tuna_position: accounts.tuna_position,
749              tuna_position_ata: accounts.tuna_position_ata,
750              tuna_position_ata_a: accounts.tuna_position_ata_a,
751              tuna_position_ata_b: accounts.tuna_position_ata_b,
752              tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
753              tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
754              fee_recipient_ata_a: accounts.fee_recipient_ata_a,
755              fee_recipient_ata_b: accounts.fee_recipient_ata_b,
756              pyth_oracle_price_feed_a: accounts.pyth_oracle_price_feed_a,
757              pyth_oracle_price_feed_b: accounts.pyth_oracle_price_feed_b,
758              whirlpool_program: accounts.whirlpool_program,
759              whirlpool: accounts.whirlpool,
760              orca_position: accounts.orca_position,
761              token_program_a: accounts.token_program_a,
762              token_program_b: accounts.token_program_b,
763              memo_program: accounts.memo_program,
764                    __args: args,
765          }
766  }
767  #[inline(always)]
768  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
769    self.invoke_signed_with_remaining_accounts(&[], &[])
770  }
771  #[inline(always)]
772  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> solana_program::entrypoint::ProgramResult {
773    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
774  }
775  #[inline(always)]
776  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
777    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
778  }
779  #[allow(clippy::arithmetic_side_effects)]
780  #[allow(clippy::clone_on_copy)]
781  #[allow(clippy::vec_init_then_push)]
782  pub fn invoke_signed_with_remaining_accounts(
783    &self,
784    signers_seeds: &[&[&[u8]]],
785    remaining_accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]
786  ) -> solana_program::entrypoint::ProgramResult {
787    let mut accounts = Vec::with_capacity(25+ remaining_accounts.len());
788                            accounts.push(solana_program::instruction::AccountMeta::new(
789            *self.authority.key,
790            true
791          ));
792                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
793            *self.tuna_config.key,
794            false
795          ));
796                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
797            *self.mint_a.key,
798            false
799          ));
800                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
801            *self.mint_b.key,
802            false
803          ));
804                                          accounts.push(solana_program::instruction::AccountMeta::new(
805            *self.market.key,
806            false
807          ));
808                                          accounts.push(solana_program::instruction::AccountMeta::new(
809            *self.vault_a.key,
810            false
811          ));
812                                          accounts.push(solana_program::instruction::AccountMeta::new(
813            *self.vault_b.key,
814            false
815          ));
816                                          accounts.push(solana_program::instruction::AccountMeta::new(
817            *self.vault_a_ata.key,
818            false
819          ));
820                                          accounts.push(solana_program::instruction::AccountMeta::new(
821            *self.vault_b_ata.key,
822            false
823          ));
824                                          accounts.push(solana_program::instruction::AccountMeta::new(
825            *self.tuna_position.key,
826            false
827          ));
828                                          accounts.push(solana_program::instruction::AccountMeta::new(
829            *self.tuna_position_ata.key,
830            false
831          ));
832                                          accounts.push(solana_program::instruction::AccountMeta::new(
833            *self.tuna_position_ata_a.key,
834            false
835          ));
836                                          accounts.push(solana_program::instruction::AccountMeta::new(
837            *self.tuna_position_ata_b.key,
838            false
839          ));
840                                          accounts.push(solana_program::instruction::AccountMeta::new(
841            *self.tuna_position_owner_ata_a.key,
842            false
843          ));
844                                          accounts.push(solana_program::instruction::AccountMeta::new(
845            *self.tuna_position_owner_ata_b.key,
846            false
847          ));
848                                          accounts.push(solana_program::instruction::AccountMeta::new(
849            *self.fee_recipient_ata_a.key,
850            false
851          ));
852                                          accounts.push(solana_program::instruction::AccountMeta::new(
853            *self.fee_recipient_ata_b.key,
854            false
855          ));
856                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
857            *self.pyth_oracle_price_feed_a.key,
858            false
859          ));
860                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
861            *self.pyth_oracle_price_feed_b.key,
862            false
863          ));
864                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
865            *self.whirlpool_program.key,
866            false
867          ));
868                                          accounts.push(solana_program::instruction::AccountMeta::new(
869            *self.whirlpool.key,
870            false
871          ));
872                                          accounts.push(solana_program::instruction::AccountMeta::new(
873            *self.orca_position.key,
874            false
875          ));
876                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
877            *self.token_program_a.key,
878            false
879          ));
880                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
881            *self.token_program_b.key,
882            false
883          ));
884                                          accounts.push(solana_program::instruction::AccountMeta::new_readonly(
885            *self.memo_program.key,
886            false
887          ));
888                      remaining_accounts.iter().for_each(|remaining_account| {
889      accounts.push(solana_program::instruction::AccountMeta {
890          pubkey: *remaining_account.0.key,
891          is_signer: remaining_account.1,
892          is_writable: remaining_account.2,
893      })
894    });
895    let mut data = borsh::to_vec(&AddLiquidityOrcaInstructionData::new()).unwrap();
896          let mut args = borsh::to_vec(&self.__args).unwrap();
897      data.append(&mut args);
898    
899    let instruction = solana_program::instruction::Instruction {
900      program_id: crate::TUNA_ID,
901      accounts,
902      data,
903    };
904    let mut account_infos = Vec::with_capacity(26 + remaining_accounts.len());
905    account_infos.push(self.__program.clone());
906                  account_infos.push(self.authority.clone());
907                        account_infos.push(self.tuna_config.clone());
908                        account_infos.push(self.mint_a.clone());
909                        account_infos.push(self.mint_b.clone());
910                        account_infos.push(self.market.clone());
911                        account_infos.push(self.vault_a.clone());
912                        account_infos.push(self.vault_b.clone());
913                        account_infos.push(self.vault_a_ata.clone());
914                        account_infos.push(self.vault_b_ata.clone());
915                        account_infos.push(self.tuna_position.clone());
916                        account_infos.push(self.tuna_position_ata.clone());
917                        account_infos.push(self.tuna_position_ata_a.clone());
918                        account_infos.push(self.tuna_position_ata_b.clone());
919                        account_infos.push(self.tuna_position_owner_ata_a.clone());
920                        account_infos.push(self.tuna_position_owner_ata_b.clone());
921                        account_infos.push(self.fee_recipient_ata_a.clone());
922                        account_infos.push(self.fee_recipient_ata_b.clone());
923                        account_infos.push(self.pyth_oracle_price_feed_a.clone());
924                        account_infos.push(self.pyth_oracle_price_feed_b.clone());
925                        account_infos.push(self.whirlpool_program.clone());
926                        account_infos.push(self.whirlpool.clone());
927                        account_infos.push(self.orca_position.clone());
928                        account_infos.push(self.token_program_a.clone());
929                        account_infos.push(self.token_program_b.clone());
930                        account_infos.push(self.memo_program.clone());
931              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
932
933    if signers_seeds.is_empty() {
934      solana_program::program::invoke(&instruction, &account_infos)
935    } else {
936      solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
937    }
938  }
939}
940
941/// Instruction builder for `AddLiquidityOrca` via CPI.
942///
943/// ### Accounts:
944///
945                      ///   0. `[writable, signer]` authority
946          ///   1. `[]` tuna_config
947          ///   2. `[]` mint_a
948          ///   3. `[]` mint_b
949                ///   4. `[writable]` market
950                ///   5. `[writable]` vault_a
951                ///   6. `[writable]` vault_b
952                ///   7. `[writable]` vault_a_ata
953                ///   8. `[writable]` vault_b_ata
954                ///   9. `[writable]` tuna_position
955                ///   10. `[writable]` tuna_position_ata
956                ///   11. `[writable]` tuna_position_ata_a
957                ///   12. `[writable]` tuna_position_ata_b
958                ///   13. `[writable]` tuna_position_owner_ata_a
959                ///   14. `[writable]` tuna_position_owner_ata_b
960                ///   15. `[writable]` fee_recipient_ata_a
961                ///   16. `[writable]` fee_recipient_ata_b
962          ///   17. `[]` pyth_oracle_price_feed_a
963          ///   18. `[]` pyth_oracle_price_feed_b
964          ///   19. `[]` whirlpool_program
965                ///   20. `[writable]` whirlpool
966                ///   21. `[writable]` orca_position
967          ///   22. `[]` token_program_a
968          ///   23. `[]` token_program_b
969          ///   24. `[]` memo_program
970#[derive(Clone, Debug)]
971pub struct AddLiquidityOrcaCpiBuilder<'a, 'b> {
972  instruction: Box<AddLiquidityOrcaCpiBuilderInstruction<'a, 'b>>,
973}
974
975impl<'a, 'b> AddLiquidityOrcaCpiBuilder<'a, 'b> {
976  pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
977    let instruction = Box::new(AddLiquidityOrcaCpiBuilderInstruction {
978      __program: program,
979              authority: None,
980              tuna_config: None,
981              mint_a: None,
982              mint_b: None,
983              market: None,
984              vault_a: None,
985              vault_b: None,
986              vault_a_ata: None,
987              vault_b_ata: None,
988              tuna_position: None,
989              tuna_position_ata: None,
990              tuna_position_ata_a: None,
991              tuna_position_ata_b: None,
992              tuna_position_owner_ata_a: None,
993              tuna_position_owner_ata_b: None,
994              fee_recipient_ata_a: None,
995              fee_recipient_ata_b: None,
996              pyth_oracle_price_feed_a: None,
997              pyth_oracle_price_feed_b: None,
998              whirlpool_program: None,
999              whirlpool: None,
1000              orca_position: None,
1001              token_program_a: None,
1002              token_program_b: None,
1003              memo_program: None,
1004                                            collateral_a: None,
1005                                collateral_b: None,
1006                                borrow_a: None,
1007                                borrow_b: None,
1008                                min_added_amount_a: None,
1009                                min_added_amount_b: None,
1010                                max_swap_slippage: None,
1011                                remaining_accounts_info: None,
1012                    __remaining_accounts: Vec::new(),
1013    });
1014    Self { instruction }
1015  }
1016      /// 
1017/// TUNA accounts
1018/// 
1019#[inline(always)]
1020    pub fn authority(&mut self, authority: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1021                        self.instruction.authority = Some(authority);
1022                    self
1023    }
1024      #[inline(always)]
1025    pub fn tuna_config(&mut self, tuna_config: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1026                        self.instruction.tuna_config = Some(tuna_config);
1027                    self
1028    }
1029      #[inline(always)]
1030    pub fn mint_a(&mut self, mint_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1031                        self.instruction.mint_a = Some(mint_a);
1032                    self
1033    }
1034      #[inline(always)]
1035    pub fn mint_b(&mut self, mint_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1036                        self.instruction.mint_b = Some(mint_b);
1037                    self
1038    }
1039      #[inline(always)]
1040    pub fn market(&mut self, market: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1041                        self.instruction.market = Some(market);
1042                    self
1043    }
1044      #[inline(always)]
1045    pub fn vault_a(&mut self, vault_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1046                        self.instruction.vault_a = Some(vault_a);
1047                    self
1048    }
1049      #[inline(always)]
1050    pub fn vault_b(&mut self, vault_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1051                        self.instruction.vault_b = Some(vault_b);
1052                    self
1053    }
1054      #[inline(always)]
1055    pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1056                        self.instruction.vault_a_ata = Some(vault_a_ata);
1057                    self
1058    }
1059      #[inline(always)]
1060    pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1061                        self.instruction.vault_b_ata = Some(vault_b_ata);
1062                    self
1063    }
1064      #[inline(always)]
1065    pub fn tuna_position(&mut self, tuna_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1066                        self.instruction.tuna_position = Some(tuna_position);
1067                    self
1068    }
1069      #[inline(always)]
1070    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1071                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
1072                    self
1073    }
1074      #[inline(always)]
1075    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1076                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
1077                    self
1078    }
1079      #[inline(always)]
1080    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1081                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
1082                    self
1083    }
1084      #[inline(always)]
1085    pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1086                        self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
1087                    self
1088    }
1089      #[inline(always)]
1090    pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1091                        self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
1092                    self
1093    }
1094      #[inline(always)]
1095    pub fn fee_recipient_ata_a(&mut self, fee_recipient_ata_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1096                        self.instruction.fee_recipient_ata_a = Some(fee_recipient_ata_a);
1097                    self
1098    }
1099      #[inline(always)]
1100    pub fn fee_recipient_ata_b(&mut self, fee_recipient_ata_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1101                        self.instruction.fee_recipient_ata_b = Some(fee_recipient_ata_b);
1102                    self
1103    }
1104      #[inline(always)]
1105    pub fn pyth_oracle_price_feed_a(&mut self, pyth_oracle_price_feed_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1106                        self.instruction.pyth_oracle_price_feed_a = Some(pyth_oracle_price_feed_a);
1107                    self
1108    }
1109      #[inline(always)]
1110    pub fn pyth_oracle_price_feed_b(&mut self, pyth_oracle_price_feed_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1111                        self.instruction.pyth_oracle_price_feed_b = Some(pyth_oracle_price_feed_b);
1112                    self
1113    }
1114      /// 
1115/// ORCA accounts
1116/// 
1117#[inline(always)]
1118    pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1119                        self.instruction.whirlpool_program = Some(whirlpool_program);
1120                    self
1121    }
1122      #[inline(always)]
1123    pub fn whirlpool(&mut self, whirlpool: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1124                        self.instruction.whirlpool = Some(whirlpool);
1125                    self
1126    }
1127      #[inline(always)]
1128    pub fn orca_position(&mut self, orca_position: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1129                        self.instruction.orca_position = Some(orca_position);
1130                    self
1131    }
1132      #[inline(always)]
1133    pub fn token_program_a(&mut self, token_program_a: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1134                        self.instruction.token_program_a = Some(token_program_a);
1135                    self
1136    }
1137      #[inline(always)]
1138    pub fn token_program_b(&mut self, token_program_b: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1139                        self.instruction.token_program_b = Some(token_program_b);
1140                    self
1141    }
1142      #[inline(always)]
1143    pub fn memo_program(&mut self, memo_program: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1144                        self.instruction.memo_program = Some(memo_program);
1145                    self
1146    }
1147                    #[inline(always)]
1148      pub fn collateral_a(&mut self, collateral_a: u64) -> &mut Self {
1149        self.instruction.collateral_a = Some(collateral_a);
1150        self
1151      }
1152                #[inline(always)]
1153      pub fn collateral_b(&mut self, collateral_b: u64) -> &mut Self {
1154        self.instruction.collateral_b = Some(collateral_b);
1155        self
1156      }
1157                #[inline(always)]
1158      pub fn borrow_a(&mut self, borrow_a: u64) -> &mut Self {
1159        self.instruction.borrow_a = Some(borrow_a);
1160        self
1161      }
1162                #[inline(always)]
1163      pub fn borrow_b(&mut self, borrow_b: u64) -> &mut Self {
1164        self.instruction.borrow_b = Some(borrow_b);
1165        self
1166      }
1167                #[inline(always)]
1168      pub fn min_added_amount_a(&mut self, min_added_amount_a: u64) -> &mut Self {
1169        self.instruction.min_added_amount_a = Some(min_added_amount_a);
1170        self
1171      }
1172                #[inline(always)]
1173      pub fn min_added_amount_b(&mut self, min_added_amount_b: u64) -> &mut Self {
1174        self.instruction.min_added_amount_b = Some(min_added_amount_b);
1175        self
1176      }
1177                #[inline(always)]
1178      pub fn max_swap_slippage(&mut self, max_swap_slippage: u32) -> &mut Self {
1179        self.instruction.max_swap_slippage = Some(max_swap_slippage);
1180        self
1181      }
1182                #[inline(always)]
1183      pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
1184        self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
1185        self
1186      }
1187        /// Add an additional account to the instruction.
1188  #[inline(always)]
1189  pub fn add_remaining_account(&mut self, account: &'b solana_program::account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
1190    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
1191    self
1192  }
1193  /// Add additional accounts to the instruction.
1194  ///
1195  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
1196  /// and a `bool` indicating whether the account is a signer or not.
1197  #[inline(always)]
1198  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
1199    self.instruction.__remaining_accounts.extend_from_slice(accounts);
1200    self
1201  }
1202  #[inline(always)]
1203  pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
1204    self.invoke_signed(&[])
1205  }
1206  #[allow(clippy::clone_on_copy)]
1207  #[allow(clippy::vec_init_then_push)]
1208  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program::entrypoint::ProgramResult {
1209          let args = AddLiquidityOrcaInstructionArgs {
1210                                                              collateral_a: self.instruction.collateral_a.clone().expect("collateral_a is not set"),
1211                                                                  collateral_b: self.instruction.collateral_b.clone().expect("collateral_b is not set"),
1212                                                                  borrow_a: self.instruction.borrow_a.clone().expect("borrow_a is not set"),
1213                                                                  borrow_b: self.instruction.borrow_b.clone().expect("borrow_b is not set"),
1214                                                                  min_added_amount_a: self.instruction.min_added_amount_a.clone().expect("min_added_amount_a is not set"),
1215                                                                  min_added_amount_b: self.instruction.min_added_amount_b.clone().expect("min_added_amount_b is not set"),
1216                                                                  max_swap_slippage: self.instruction.max_swap_slippage.clone().expect("max_swap_slippage is not set"),
1217                                                                  remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
1218                                    };
1219        let instruction = AddLiquidityOrcaCpi {
1220        __program: self.instruction.__program,
1221                  
1222          authority: self.instruction.authority.expect("authority is not set"),
1223                  
1224          tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
1225                  
1226          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
1227                  
1228          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
1229                  
1230          market: self.instruction.market.expect("market is not set"),
1231                  
1232          vault_a: self.instruction.vault_a.expect("vault_a is not set"),
1233                  
1234          vault_b: self.instruction.vault_b.expect("vault_b is not set"),
1235                  
1236          vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
1237                  
1238          vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
1239                  
1240          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
1241                  
1242          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
1243                  
1244          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
1245                  
1246          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
1247                  
1248          tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
1249                  
1250          tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
1251                  
1252          fee_recipient_ata_a: self.instruction.fee_recipient_ata_a.expect("fee_recipient_ata_a is not set"),
1253                  
1254          fee_recipient_ata_b: self.instruction.fee_recipient_ata_b.expect("fee_recipient_ata_b is not set"),
1255                  
1256          pyth_oracle_price_feed_a: self.instruction.pyth_oracle_price_feed_a.expect("pyth_oracle_price_feed_a is not set"),
1257                  
1258          pyth_oracle_price_feed_b: self.instruction.pyth_oracle_price_feed_b.expect("pyth_oracle_price_feed_b is not set"),
1259                  
1260          whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
1261                  
1262          whirlpool: self.instruction.whirlpool.expect("whirlpool is not set"),
1263                  
1264          orca_position: self.instruction.orca_position.expect("orca_position is not set"),
1265                  
1266          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
1267                  
1268          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
1269                  
1270          memo_program: self.instruction.memo_program.expect("memo_program is not set"),
1271                          __args: args,
1272            };
1273    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
1274  }
1275}
1276
1277#[derive(Clone, Debug)]
1278struct AddLiquidityOrcaCpiBuilderInstruction<'a, 'b> {
1279  __program: &'b solana_program::account_info::AccountInfo<'a>,
1280            authority: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1281                tuna_config: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1282                mint_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1283                mint_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1284                market: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1285                vault_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1286                vault_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1287                vault_a_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1288                vault_b_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1289                tuna_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1290                tuna_position_ata: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1291                tuna_position_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1292                tuna_position_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1293                tuna_position_owner_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1294                tuna_position_owner_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1295                fee_recipient_ata_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1296                fee_recipient_ata_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1297                pyth_oracle_price_feed_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1298                pyth_oracle_price_feed_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1299                whirlpool_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1300                whirlpool: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1301                orca_position: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1302                token_program_a: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1303                token_program_b: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1304                memo_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1305                        collateral_a: Option<u64>,
1306                collateral_b: Option<u64>,
1307                borrow_a: Option<u64>,
1308                borrow_b: Option<u64>,
1309                min_added_amount_a: Option<u64>,
1310                min_added_amount_b: Option<u64>,
1311                max_swap_slippage: Option<u32>,
1312                remaining_accounts_info: Option<RemainingAccountsInfo>,
1313        /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
1314  __remaining_accounts: Vec<(&'b solana_program::account_info::AccountInfo<'a>, bool, bool)>,
1315}
1316