defituna_client/generated/instructions/
modify_tuna_spot_position_orca.rs

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