Skip to main content

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