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