Skip to main content

defituna_client/generated/instructions/
close_tuna_lp_position_fusion.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_FUSION_DISCRIMINATOR: [u8; 8] = [91, 149, 37, 23, 74, 118, 53, 119];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct CloseTunaLpPositionFusion {
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 token_program_a: solana_pubkey::Pubkey,
32          
33              
34          pub token_program_b: solana_pubkey::Pubkey,
35          
36              
37          pub tuna_position: solana_pubkey::Pubkey,
38          
39              
40          pub tuna_position_mint: solana_pubkey::Pubkey,
41          
42              
43          pub tuna_position_ata: solana_pubkey::Pubkey,
44          
45              
46          pub tuna_position_ata_a: solana_pubkey::Pubkey,
47          
48              
49          pub tuna_position_ata_b: solana_pubkey::Pubkey,
50                /// 
51/// Fusion accounts
52/// 
53
54    
55              
56          pub fusionamm_program: solana_pubkey::Pubkey,
57          
58              
59          pub fusion_position: solana_pubkey::Pubkey,
60                /// 
61/// Other accounts
62/// 
63
64    
65              
66          pub token2022_program: solana_pubkey::Pubkey,
67      }
68
69impl CloseTunaLpPositionFusion {
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_readonly(
90            self.token_program_a,
91            false
92          ));
93                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
94            self.token_program_b,
95            false
96          ));
97                                          accounts.push(solana_instruction::AccountMeta::new(
98            self.tuna_position,
99            false
100          ));
101                                          accounts.push(solana_instruction::AccountMeta::new(
102            self.tuna_position_mint,
103            false
104          ));
105                                          accounts.push(solana_instruction::AccountMeta::new(
106            self.tuna_position_ata,
107            false
108          ));
109                                          accounts.push(solana_instruction::AccountMeta::new(
110            self.tuna_position_ata_a,
111            false
112          ));
113                                          accounts.push(solana_instruction::AccountMeta::new(
114            self.tuna_position_ata_b,
115            false
116          ));
117                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
118            self.fusionamm_program,
119            false
120          ));
121                                          accounts.push(solana_instruction::AccountMeta::new(
122            self.fusion_position,
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(&CloseTunaLpPositionFusionInstructionData::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 CloseTunaLpPositionFusionInstructionData {
143            discriminator: [u8; 8],
144      }
145
146impl CloseTunaLpPositionFusionInstructionData {
147  pub fn new() -> Self {
148    Self {
149                        discriminator: [91, 149, 37, 23, 74, 118, 53, 119],
150                  }
151  }
152}
153
154impl Default for CloseTunaLpPositionFusionInstructionData {
155  fn default() -> Self {
156    Self::new()
157  }
158}
159
160
161
162/// Instruction builder for `CloseTunaLpPositionFusion`.
163///
164/// ### Accounts:
165///
166                      ///   0. `[writable, signer]` authority
167          ///   1. `[]` mint_a
168          ///   2. `[]` mint_b
169          ///   3. `[]` token_program_a
170          ///   4. `[]` token_program_b
171                ///   5. `[writable]` tuna_position
172                ///   6. `[writable]` tuna_position_mint
173                ///   7. `[writable]` tuna_position_ata
174                ///   8. `[writable]` tuna_position_ata_a
175                ///   9. `[writable]` tuna_position_ata_b
176          ///   10. `[]` fusionamm_program
177                ///   11. `[writable]` fusion_position
178          ///   12. `[]` token2022_program
179#[derive(Clone, Debug, Default)]
180pub struct CloseTunaLpPositionFusionBuilder {
181            authority: Option<solana_pubkey::Pubkey>,
182                mint_a: Option<solana_pubkey::Pubkey>,
183                mint_b: Option<solana_pubkey::Pubkey>,
184                token_program_a: Option<solana_pubkey::Pubkey>,
185                token_program_b: Option<solana_pubkey::Pubkey>,
186                tuna_position: Option<solana_pubkey::Pubkey>,
187                tuna_position_mint: Option<solana_pubkey::Pubkey>,
188                tuna_position_ata: Option<solana_pubkey::Pubkey>,
189                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
190                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
191                fusionamm_program: Option<solana_pubkey::Pubkey>,
192                fusion_position: Option<solana_pubkey::Pubkey>,
193                token2022_program: Option<solana_pubkey::Pubkey>,
194                __remaining_accounts: Vec<solana_instruction::AccountMeta>,
195}
196
197impl CloseTunaLpPositionFusionBuilder {
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 token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
221                        self.token_program_a = Some(token_program_a);
222                    self
223    }
224            #[inline(always)]
225    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
226                        self.token_program_b = Some(token_program_b);
227                    self
228    }
229            #[inline(always)]
230    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
231                        self.tuna_position = Some(tuna_position);
232                    self
233    }
234            #[inline(always)]
235    pub fn tuna_position_mint(&mut self, tuna_position_mint: solana_pubkey::Pubkey) -> &mut Self {
236                        self.tuna_position_mint = Some(tuna_position_mint);
237                    self
238    }
239            #[inline(always)]
240    pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
241                        self.tuna_position_ata = Some(tuna_position_ata);
242                    self
243    }
244            #[inline(always)]
245    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
246                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
247                    self
248    }
249            #[inline(always)]
250    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
251                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
252                    self
253    }
254            /// 
255/// Fusion accounts
256/// 
257#[inline(always)]
258    pub fn fusionamm_program(&mut self, fusionamm_program: solana_pubkey::Pubkey) -> &mut Self {
259                        self.fusionamm_program = Some(fusionamm_program);
260                    self
261    }
262            #[inline(always)]
263    pub fn fusion_position(&mut self, fusion_position: solana_pubkey::Pubkey) -> &mut Self {
264                        self.fusion_position = Some(fusion_position);
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 = CloseTunaLpPositionFusion {
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                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
294                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
295                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
296                                        tuna_position_mint: self.tuna_position_mint.expect("tuna_position_mint is not set"),
297                                        tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
298                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
299                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
300                                        fusionamm_program: self.fusionamm_program.expect("fusionamm_program is not set"),
301                                        fusion_position: self.fusion_position.expect("fusion_position 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_fusion` CPI accounts.
310  pub struct CloseTunaLpPositionFusionCpiAccounts<'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 token_program_a: &'b solana_account_info::AccountInfo<'a>,
327                
328                    
329              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
330                
331                    
332              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
333                
334                    
335              pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
336                
337                    
338              pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
339                
340                    
341              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
342                
343                    
344              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
345                        /// 
346/// Fusion accounts
347/// 
348
349      
350                    
351              pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
352                
353                    
354              pub fusion_position: &'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_fusion` CPI instruction.
365pub struct CloseTunaLpPositionFusionCpi<'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 token_program_a: &'b solana_account_info::AccountInfo<'a>,
384          
385              
386          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
387          
388              
389          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
390          
391              
392          pub tuna_position_mint: &'b solana_account_info::AccountInfo<'a>,
393          
394              
395          pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
396          
397              
398          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
399          
400              
401          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
402                /// 
403/// Fusion accounts
404/// 
405
406    
407              
408          pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
409          
410              
411          pub fusion_position: &'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> CloseTunaLpPositionFusionCpi<'a, 'b> {
422  pub fn new(
423    program: &'b solana_account_info::AccountInfo<'a>,
424          accounts: CloseTunaLpPositionFusionCpiAccounts<'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              token_program_a: accounts.token_program_a,
432              token_program_b: accounts.token_program_b,
433              tuna_position: accounts.tuna_position,
434              tuna_position_mint: accounts.tuna_position_mint,
435              tuna_position_ata: accounts.tuna_position_ata,
436              tuna_position_ata_a: accounts.tuna_position_ata_a,
437              tuna_position_ata_b: accounts.tuna_position_ata_b,
438              fusionamm_program: accounts.fusionamm_program,
439              fusion_position: accounts.fusion_position,
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_readonly(
477            *self.token_program_a.key,
478            false
479          ));
480                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
481            *self.token_program_b.key,
482            false
483          ));
484                                          accounts.push(solana_instruction::AccountMeta::new(
485            *self.tuna_position.key,
486            false
487          ));
488                                          accounts.push(solana_instruction::AccountMeta::new(
489            *self.tuna_position_mint.key,
490            false
491          ));
492                                          accounts.push(solana_instruction::AccountMeta::new(
493            *self.tuna_position_ata.key,
494            false
495          ));
496                                          accounts.push(solana_instruction::AccountMeta::new(
497            *self.tuna_position_ata_a.key,
498            false
499          ));
500                                          accounts.push(solana_instruction::AccountMeta::new(
501            *self.tuna_position_ata_b.key,
502            false
503          ));
504                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
505            *self.fusionamm_program.key,
506            false
507          ));
508                                          accounts.push(solana_instruction::AccountMeta::new(
509            *self.fusion_position.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(&CloseTunaLpPositionFusionInstructionData::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.token_program_a.clone());
536                        account_infos.push(self.token_program_b.clone());
537                        account_infos.push(self.tuna_position.clone());
538                        account_infos.push(self.tuna_position_mint.clone());
539                        account_infos.push(self.tuna_position_ata.clone());
540                        account_infos.push(self.tuna_position_ata_a.clone());
541                        account_infos.push(self.tuna_position_ata_b.clone());
542                        account_infos.push(self.fusionamm_program.clone());
543                        account_infos.push(self.fusion_position.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 `CloseTunaLpPositionFusion` via CPI.
556///
557/// ### Accounts:
558///
559                      ///   0. `[writable, signer]` authority
560          ///   1. `[]` mint_a
561          ///   2. `[]` mint_b
562          ///   3. `[]` token_program_a
563          ///   4. `[]` token_program_b
564                ///   5. `[writable]` tuna_position
565                ///   6. `[writable]` tuna_position_mint
566                ///   7. `[writable]` tuna_position_ata
567                ///   8. `[writable]` tuna_position_ata_a
568                ///   9. `[writable]` tuna_position_ata_b
569          ///   10. `[]` fusionamm_program
570                ///   11. `[writable]` fusion_position
571          ///   12. `[]` token2022_program
572#[derive(Clone, Debug)]
573pub struct CloseTunaLpPositionFusionCpiBuilder<'a, 'b> {
574  instruction: Box<CloseTunaLpPositionFusionCpiBuilderInstruction<'a, 'b>>,
575}
576
577impl<'a, 'b> CloseTunaLpPositionFusionCpiBuilder<'a, 'b> {
578  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
579    let instruction = Box::new(CloseTunaLpPositionFusionCpiBuilderInstruction {
580      __program: program,
581              authority: None,
582              mint_a: None,
583              mint_b: None,
584              token_program_a: None,
585              token_program_b: None,
586              tuna_position: None,
587              tuna_position_mint: None,
588              tuna_position_ata: None,
589              tuna_position_ata_a: None,
590              tuna_position_ata_b: None,
591              fusionamm_program: None,
592              fusion_position: 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 token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
618                        self.instruction.token_program_a = Some(token_program_a);
619                    self
620    }
621      #[inline(always)]
622    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
623                        self.instruction.token_program_b = Some(token_program_b);
624                    self
625    }
626      #[inline(always)]
627    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
628                        self.instruction.tuna_position = Some(tuna_position);
629                    self
630    }
631      #[inline(always)]
632    pub fn tuna_position_mint(&mut self, tuna_position_mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
633                        self.instruction.tuna_position_mint = Some(tuna_position_mint);
634                    self
635    }
636      #[inline(always)]
637    pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
638                        self.instruction.tuna_position_ata = Some(tuna_position_ata);
639                    self
640    }
641      #[inline(always)]
642    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
643                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
644                    self
645    }
646      #[inline(always)]
647    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
648                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
649                    self
650    }
651      /// 
652/// Fusion accounts
653/// 
654#[inline(always)]
655    pub fn fusionamm_program(&mut self, fusionamm_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
656                        self.instruction.fusionamm_program = Some(fusionamm_program);
657                    self
658    }
659      #[inline(always)]
660    pub fn fusion_position(&mut self, fusion_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
661                        self.instruction.fusion_position = Some(fusion_position);
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 = CloseTunaLpPositionFusionCpi {
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          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
704                  
705          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
706                  
707          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
708                  
709          tuna_position_mint: self.instruction.tuna_position_mint.expect("tuna_position_mint is not set"),
710                  
711          tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
712                  
713          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
714                  
715          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
716                  
717          fusionamm_program: self.instruction.fusionamm_program.expect("fusionamm_program is not set"),
718                  
719          fusion_position: self.instruction.fusion_position.expect("fusion_position 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 CloseTunaLpPositionFusionCpiBuilderInstruction<'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                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
734                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
735                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
736                tuna_position_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
737                tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
738                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
739                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
740                fusionamm_program: Option<&'b solana_account_info::AccountInfo<'a>>,
741                fusion_position: 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