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