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