Skip to main content

defituna_client/generated/instructions/
close_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 CLOSE_TUNA_LP_POSITION_ORCA_DISCRIMINATOR: [u8; 8] = [253, 98, 90, 239, 191, 36, 161, 26];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct CloseTunaLpPositionOrca {
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 tuna_position: solana_pubkey::Pubkey,
32          
33              
34          pub tuna_position_mint: solana_pubkey::Pubkey,
35          
36              
37          pub tuna_position_ata: solana_pubkey::Pubkey,
38          
39              
40          pub tuna_position_ata_a: solana_pubkey::Pubkey,
41          
42              
43          pub tuna_position_ata_b: solana_pubkey::Pubkey,
44                /// 
45/// ORCA accounts
46/// 
47
48    
49              
50          pub whirlpool_program: solana_pubkey::Pubkey,
51          
52              
53          pub orca_position: solana_pubkey::Pubkey,
54          
55              
56          pub token_program_a: solana_pubkey::Pubkey,
57          
58              
59          pub token_program_b: solana_pubkey::Pubkey,
60                /// 
61/// Other accounts
62/// 
63
64    
65              
66          pub token2022_program: solana_pubkey::Pubkey,
67      }
68
69impl CloseTunaLpPositionOrca {
70  pub fn instruction(&self) -> solana_instruction::Instruction {
71    self.instruction_with_remaining_accounts(&[])
72  }
73  #[allow(clippy::arithmetic_side_effects)]
74  #[allow(clippy::vec_init_then_push)]
75  pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
76    let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
77                            accounts.push(solana_instruction::AccountMeta::new(
78            self.authority,
79            true
80          ));
81                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
82            self.mint_a,
83            false
84          ));
85                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
86            self.mint_b,
87            false
88          ));
89                                          accounts.push(solana_instruction::AccountMeta::new(
90            self.tuna_position,
91            false
92          ));
93                                          accounts.push(solana_instruction::AccountMeta::new(
94            self.tuna_position_mint,
95            false
96          ));
97                                          accounts.push(solana_instruction::AccountMeta::new(
98            self.tuna_position_ata,
99            false
100          ));
101                                          accounts.push(solana_instruction::AccountMeta::new(
102            self.tuna_position_ata_a,
103            false
104          ));
105                                          accounts.push(solana_instruction::AccountMeta::new(
106            self.tuna_position_ata_b,
107            false
108          ));
109                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
110            self.whirlpool_program,
111            false
112          ));
113                                          accounts.push(solana_instruction::AccountMeta::new(
114            self.orca_position,
115            false
116          ));
117                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
118            self.token_program_a,
119            false
120          ));
121                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
122            self.token_program_b,
123            false
124          ));
125                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
126            self.token2022_program,
127            false
128          ));
129                      accounts.extend_from_slice(remaining_accounts);
130    let data = borsh::to_vec(&CloseTunaLpPositionOrcaInstructionData::new()).unwrap();
131    
132    solana_instruction::Instruction {
133      program_id: crate::TUNA_ID,
134      accounts,
135      data,
136    }
137  }
138}
139
140#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
141#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
142 pub struct CloseTunaLpPositionOrcaInstructionData {
143            discriminator: [u8; 8],
144      }
145
146impl CloseTunaLpPositionOrcaInstructionData {
147  pub fn new() -> Self {
148    Self {
149                        discriminator: [253, 98, 90, 239, 191, 36, 161, 26],
150                  }
151  }
152}
153
154impl Default for CloseTunaLpPositionOrcaInstructionData {
155  fn default() -> Self {
156    Self::new()
157  }
158}
159
160
161
162/// Instruction builder for `CloseTunaLpPositionOrca`.
163///
164/// ### Accounts:
165///
166                      ///   0. `[writable, signer]` authority
167          ///   1. `[]` mint_a
168          ///   2. `[]` mint_b
169                ///   3. `[writable]` tuna_position
170                ///   4. `[writable]` tuna_position_mint
171                ///   5. `[writable]` tuna_position_ata
172                ///   6. `[writable]` tuna_position_ata_a
173                ///   7. `[writable]` tuna_position_ata_b
174          ///   8. `[]` whirlpool_program
175                ///   9. `[writable]` orca_position
176          ///   10. `[]` token_program_a
177          ///   11. `[]` token_program_b
178          ///   12. `[]` token2022_program
179#[derive(Clone, Debug, Default)]
180pub struct CloseTunaLpPositionOrcaBuilder {
181            authority: Option<solana_pubkey::Pubkey>,
182                mint_a: Option<solana_pubkey::Pubkey>,
183                mint_b: Option<solana_pubkey::Pubkey>,
184                tuna_position: Option<solana_pubkey::Pubkey>,
185                tuna_position_mint: Option<solana_pubkey::Pubkey>,
186                tuna_position_ata: Option<solana_pubkey::Pubkey>,
187                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
188                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
189                whirlpool_program: Option<solana_pubkey::Pubkey>,
190                orca_position: Option<solana_pubkey::Pubkey>,
191                token_program_a: Option<solana_pubkey::Pubkey>,
192                token_program_b: Option<solana_pubkey::Pubkey>,
193                token2022_program: Option<solana_pubkey::Pubkey>,
194                __remaining_accounts: Vec<solana_instruction::AccountMeta>,
195}
196
197impl CloseTunaLpPositionOrcaBuilder {
198  pub fn new() -> Self {
199    Self::default()
200  }
201            /// 
202/// TUNA accounts
203/// 
204#[inline(always)]
205    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
206                        self.authority = Some(authority);
207                    self
208    }
209            #[inline(always)]
210    pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
211                        self.mint_a = Some(mint_a);
212                    self
213    }
214            #[inline(always)]
215    pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
216                        self.mint_b = Some(mint_b);
217                    self
218    }
219            #[inline(always)]
220    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
221                        self.tuna_position = Some(tuna_position);
222                    self
223    }
224            #[inline(always)]
225    pub fn tuna_position_mint(&mut self, tuna_position_mint: solana_pubkey::Pubkey) -> &mut Self {
226                        self.tuna_position_mint = Some(tuna_position_mint);
227                    self
228    }
229            #[inline(always)]
230    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
231                        self.tuna_position_ata = Some(tuna_position_ata);
232                    self
233    }
234            #[inline(always)]
235    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
236                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
237                    self
238    }
239            #[inline(always)]
240    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
241                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
242                    self
243    }
244            /// 
245/// ORCA accounts
246/// 
247#[inline(always)]
248    pub fn whirlpool_program(&mut self, whirlpool_program: solana_pubkey::Pubkey) -> &mut Self {
249                        self.whirlpool_program = Some(whirlpool_program);
250                    self
251    }
252            #[inline(always)]
253    pub fn orca_position(&mut self, orca_position: solana_pubkey::Pubkey) -> &mut Self {
254                        self.orca_position = Some(orca_position);
255                    self
256    }
257            #[inline(always)]
258    pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
259                        self.token_program_a = Some(token_program_a);
260                    self
261    }
262            #[inline(always)]
263    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
264                        self.token_program_b = Some(token_program_b);
265                    self
266    }
267            /// 
268/// Other accounts
269/// 
270#[inline(always)]
271    pub fn token2022_program(&mut self, token2022_program: solana_pubkey::Pubkey) -> &mut Self {
272                        self.token2022_program = Some(token2022_program);
273                    self
274    }
275            /// Add an additional account to the instruction.
276  #[inline(always)]
277  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
278    self.__remaining_accounts.push(account);
279    self
280  }
281  /// Add additional accounts to the instruction.
282  #[inline(always)]
283  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
284    self.__remaining_accounts.extend_from_slice(accounts);
285    self
286  }
287  #[allow(clippy::clone_on_copy)]
288  pub fn instruction(&self) -> solana_instruction::Instruction {
289    let accounts = CloseTunaLpPositionOrca {
290                              authority: self.authority.expect("authority is not set"),
291                                        mint_a: self.mint_a.expect("mint_a is not set"),
292                                        mint_b: self.mint_b.expect("mint_b is not set"),
293                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
294                                        tuna_position_mint: self.tuna_position_mint.expect("tuna_position_mint is not set"),
295                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
296                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
297                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
298                                        whirlpool_program: self.whirlpool_program.expect("whirlpool_program is not set"),
299                                        orca_position: self.orca_position.expect("orca_position is not set"),
300                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
301                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
302                                        token2022_program: self.token2022_program.expect("token2022_program is not set"),
303                      };
304    
305    accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
306  }
307}
308
309  /// `close_tuna_lp_position_orca` CPI accounts.
310  pub struct CloseTunaLpPositionOrcaCpiAccounts<'a, 'b> {
311                  /// 
312/// TUNA accounts
313/// 
314
315      
316                    
317              pub authority: &'b solana_account_info::AccountInfo<'a>,
318                
319                    
320              pub mint_a: &'b solana_account_info::AccountInfo<'a>,
321                
322                    
323              pub mint_b: &'b solana_account_info::AccountInfo<'a>,
324                
325                    
326              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
327                
328                    
329              pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
330                
331                    
332              pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
333                
334                    
335              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
336                
337                    
338              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
339                        /// 
340/// ORCA accounts
341/// 
342
343      
344                    
345              pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
346                
347                    
348              pub orca_position: &'b solana_account_info::AccountInfo<'a>,
349                
350                    
351              pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
352                
353                    
354              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
355                        /// 
356/// Other accounts
357/// 
358
359      
360                    
361              pub token2022_program: &'b solana_account_info::AccountInfo<'a>,
362            }
363
364/// `close_tuna_lp_position_orca` CPI instruction.
365pub struct CloseTunaLpPositionOrcaCpi<'a, 'b> {
366  /// The program to invoke.
367  pub __program: &'b solana_account_info::AccountInfo<'a>,
368            /// 
369/// TUNA accounts
370/// 
371
372    
373              
374          pub authority: &'b solana_account_info::AccountInfo<'a>,
375          
376              
377          pub mint_a: &'b solana_account_info::AccountInfo<'a>,
378          
379              
380          pub mint_b: &'b solana_account_info::AccountInfo<'a>,
381          
382              
383          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
384          
385              
386          pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
387          
388              
389          pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
390          
391              
392          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
393          
394              
395          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
396                /// 
397/// ORCA accounts
398/// 
399
400    
401              
402          pub whirlpool_program: &'b solana_account_info::AccountInfo<'a>,
403          
404              
405          pub orca_position: &'b solana_account_info::AccountInfo<'a>,
406          
407              
408          pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
409          
410              
411          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
412                /// 
413/// Other accounts
414/// 
415
416    
417              
418          pub token2022_program: &'b solana_account_info::AccountInfo<'a>,
419        }
420
421impl<'a, 'b> CloseTunaLpPositionOrcaCpi<'a, 'b> {
422  pub fn new(
423    program: &'b solana_account_info::AccountInfo<'a>,
424          accounts: CloseTunaLpPositionOrcaCpiAccounts<'a, 'b>,
425          ) -> Self {
426    Self {
427      __program: program,
428              authority: accounts.authority,
429              mint_a: accounts.mint_a,
430              mint_b: accounts.mint_b,
431              tuna_position: accounts.tuna_position,
432              tuna_position_mint: accounts.tuna_position_mint,
433              tuna_position_ata: accounts.tuna_position_ata,
434              tuna_position_ata_a: accounts.tuna_position_ata_a,
435              tuna_position_ata_b: accounts.tuna_position_ata_b,
436              whirlpool_program: accounts.whirlpool_program,
437              orca_position: accounts.orca_position,
438              token_program_a: accounts.token_program_a,
439              token_program_b: accounts.token_program_b,
440              token2022_program: accounts.token2022_program,
441                }
442  }
443  #[inline(always)]
444  pub fn invoke(&self) -> solana_program_error::ProgramResult {
445    self.invoke_signed_with_remaining_accounts(&[], &[])
446  }
447  #[inline(always)]
448  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
449    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
450  }
451  #[inline(always)]
452  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
453    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
454  }
455  #[allow(clippy::arithmetic_side_effects)]
456  #[allow(clippy::clone_on_copy)]
457  #[allow(clippy::vec_init_then_push)]
458  pub fn invoke_signed_with_remaining_accounts(
459    &self,
460    signers_seeds: &[&[&[u8]]],
461    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
462  ) -> solana_program_error::ProgramResult {
463    let mut accounts = Vec::with_capacity(13+ remaining_accounts.len());
464                            accounts.push(solana_instruction::AccountMeta::new(
465            *self.authority.key,
466            true
467          ));
468                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
469            *self.mint_a.key,
470            false
471          ));
472                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
473            *self.mint_b.key,
474            false
475          ));
476                                          accounts.push(solana_instruction::AccountMeta::new(
477            *self.tuna_position.key,
478            false
479          ));
480                                          accounts.push(solana_instruction::AccountMeta::new(
481            *self.tuna_position_mint.key,
482            false
483          ));
484                                          accounts.push(solana_instruction::AccountMeta::new(
485            *self.tuna_position_ata.key,
486            false
487          ));
488                                          accounts.push(solana_instruction::AccountMeta::new(
489            *self.tuna_position_ata_a.key,
490            false
491          ));
492                                          accounts.push(solana_instruction::AccountMeta::new(
493            *self.tuna_position_ata_b.key,
494            false
495          ));
496                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
497            *self.whirlpool_program.key,
498            false
499          ));
500                                          accounts.push(solana_instruction::AccountMeta::new(
501            *self.orca_position.key,
502            false
503          ));
504                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
505            *self.token_program_a.key,
506            false
507          ));
508                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
509            *self.token_program_b.key,
510            false
511          ));
512                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
513            *self.token2022_program.key,
514            false
515          ));
516                      remaining_accounts.iter().for_each(|remaining_account| {
517      accounts.push(solana_instruction::AccountMeta {
518          pubkey: *remaining_account.0.key,
519          is_signer: remaining_account.1,
520          is_writable: remaining_account.2,
521      })
522    });
523    let data = borsh::to_vec(&CloseTunaLpPositionOrcaInstructionData::new()).unwrap();
524    
525    let instruction = solana_instruction::Instruction {
526      program_id: crate::TUNA_ID,
527      accounts,
528      data,
529    };
530    let mut account_infos = Vec::with_capacity(14 + remaining_accounts.len());
531    account_infos.push(self.__program.clone());
532                  account_infos.push(self.authority.clone());
533                        account_infos.push(self.mint_a.clone());
534                        account_infos.push(self.mint_b.clone());
535                        account_infos.push(self.tuna_position.clone());
536                        account_infos.push(self.tuna_position_mint.clone());
537                        account_infos.push(self.tuna_position_ata.clone());
538                        account_infos.push(self.tuna_position_ata_a.clone());
539                        account_infos.push(self.tuna_position_ata_b.clone());
540                        account_infos.push(self.whirlpool_program.clone());
541                        account_infos.push(self.orca_position.clone());
542                        account_infos.push(self.token_program_a.clone());
543                        account_infos.push(self.token_program_b.clone());
544                        account_infos.push(self.token2022_program.clone());
545              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
546
547    if signers_seeds.is_empty() {
548      solana_cpi::invoke(&instruction, &account_infos)
549    } else {
550      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
551    }
552  }
553}
554
555/// Instruction builder for `CloseTunaLpPositionOrca` via CPI.
556///
557/// ### Accounts:
558///
559                      ///   0. `[writable, signer]` authority
560          ///   1. `[]` mint_a
561          ///   2. `[]` mint_b
562                ///   3. `[writable]` tuna_position
563                ///   4. `[writable]` tuna_position_mint
564                ///   5. `[writable]` tuna_position_ata
565                ///   6. `[writable]` tuna_position_ata_a
566                ///   7. `[writable]` tuna_position_ata_b
567          ///   8. `[]` whirlpool_program
568                ///   9. `[writable]` orca_position
569          ///   10. `[]` token_program_a
570          ///   11. `[]` token_program_b
571          ///   12. `[]` token2022_program
572#[derive(Clone, Debug)]
573pub struct CloseTunaLpPositionOrcaCpiBuilder<'a, 'b> {
574  instruction: Box<CloseTunaLpPositionOrcaCpiBuilderInstruction<'a, 'b>>,
575}
576
577impl<'a, 'b> CloseTunaLpPositionOrcaCpiBuilder<'a, 'b> {
578  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
579    let instruction = Box::new(CloseTunaLpPositionOrcaCpiBuilderInstruction {
580      __program: program,
581              authority: None,
582              mint_a: None,
583              mint_b: None,
584              tuna_position: None,
585              tuna_position_mint: None,
586              tuna_position_ata: None,
587              tuna_position_ata_a: None,
588              tuna_position_ata_b: None,
589              whirlpool_program: None,
590              orca_position: None,
591              token_program_a: None,
592              token_program_b: None,
593              token2022_program: None,
594                                __remaining_accounts: Vec::new(),
595    });
596    Self { instruction }
597  }
598      /// 
599/// TUNA accounts
600/// 
601#[inline(always)]
602    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
603                        self.instruction.authority = Some(authority);
604                    self
605    }
606      #[inline(always)]
607    pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
608                        self.instruction.mint_a = Some(mint_a);
609                    self
610    }
611      #[inline(always)]
612    pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
613                        self.instruction.mint_b = Some(mint_b);
614                    self
615    }
616      #[inline(always)]
617    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
618                        self.instruction.tuna_position = Some(tuna_position);
619                    self
620    }
621      #[inline(always)]
622    pub fn tuna_position_mint(&mut self, tuna_position_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
623                        self.instruction.tuna_position_mint = Some(tuna_position_mint);
624                    self
625    }
626      #[inline(always)]
627    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
628                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
629                    self
630    }
631      #[inline(always)]
632    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
633                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
634                    self
635    }
636      #[inline(always)]
637    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
638                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
639                    self
640    }
641      /// 
642/// ORCA accounts
643/// 
644#[inline(always)]
645    pub fn whirlpool_program(&mut self, whirlpool_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
646                        self.instruction.whirlpool_program = Some(whirlpool_program);
647                    self
648    }
649      #[inline(always)]
650    pub fn orca_position(&mut self, orca_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
651                        self.instruction.orca_position = Some(orca_position);
652                    self
653    }
654      #[inline(always)]
655    pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
656                        self.instruction.token_program_a = Some(token_program_a);
657                    self
658    }
659      #[inline(always)]
660    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
661                        self.instruction.token_program_b = Some(token_program_b);
662                    self
663    }
664      /// 
665/// Other accounts
666/// 
667#[inline(always)]
668    pub fn token2022_program(&mut self, token2022_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
669                        self.instruction.token2022_program = Some(token2022_program);
670                    self
671    }
672            /// Add an additional account to the instruction.
673  #[inline(always)]
674  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
675    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
676    self
677  }
678  /// Add additional accounts to the instruction.
679  ///
680  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
681  /// and a `bool` indicating whether the account is a signer or not.
682  #[inline(always)]
683  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
684    self.instruction.__remaining_accounts.extend_from_slice(accounts);
685    self
686  }
687  #[inline(always)]
688  pub fn invoke(&self) -> solana_program_error::ProgramResult {
689    self.invoke_signed(&[])
690  }
691  #[allow(clippy::clone_on_copy)]
692  #[allow(clippy::vec_init_then_push)]
693  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
694        let instruction = CloseTunaLpPositionOrcaCpi {
695        __program: self.instruction.__program,
696                  
697          authority: self.instruction.authority.expect("authority is not set"),
698                  
699          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
700                  
701          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
702                  
703          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
704                  
705          tuna_position_mint: self.instruction.tuna_position_mint.expect("tuna_position_mint is not set"),
706                  
707          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
708                  
709          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
710                  
711          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
712                  
713          whirlpool_program: self.instruction.whirlpool_program.expect("whirlpool_program is not set"),
714                  
715          orca_position: self.instruction.orca_position.expect("orca_position is not set"),
716                  
717          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
718                  
719          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
720                  
721          token2022_program: self.instruction.token2022_program.expect("token2022_program is not set"),
722                    };
723    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
724  }
725}
726
727#[derive(Clone, Debug)]
728struct CloseTunaLpPositionOrcaCpiBuilderInstruction<'a, 'b> {
729  __program: &'b solana_account_info::AccountInfo<'a>,
730            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
731                mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
732                mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
733                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
734                tuna_position_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
735                tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
736                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
737                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
738                whirlpool_program: Option<&'b solana_account_info::AccountInfo<'a>>,
739                orca_position: Option<&'b solana_account_info::AccountInfo<'a>>,
740                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
741                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
742                token2022_program: Option<&'b solana_account_info::AccountInfo<'a>>,
743                /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
744  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
745}
746