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