Skip to main content

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