1use crate::generated::types::RemainingAccountsInfo;
9use borsh::BorshSerialize;
10use borsh::BorshDeserialize;
11
12pub const COLLECT_FEES_FUSION_DISCRIMINATOR: [u8; 8] = [52, 219, 25, 250, 31, 203, 9, 129];
13
14#[derive(Debug)]
16pub struct CollectFeesFusion {
17 pub authority: solana_pubkey::Pubkey,
24
25
26 pub tuna_config: solana_pubkey::Pubkey,
27
28
29 pub mint_a: solana_pubkey::Pubkey,
30
31
32 pub mint_b: solana_pubkey::Pubkey,
33
34
35 pub token_program_a: solana_pubkey::Pubkey,
36
37
38 pub token_program_b: solana_pubkey::Pubkey,
39
40
41 pub tuna_position: solana_pubkey::Pubkey,
42
43
44 pub tuna_position_ata: solana_pubkey::Pubkey,
45
46
47 pub tuna_position_ata_a: solana_pubkey::Pubkey,
48
49
50 pub tuna_position_ata_b: solana_pubkey::Pubkey,
51
52
53 pub tuna_position_owner_ata_a: solana_pubkey::Pubkey,
54
55
56 pub tuna_position_owner_ata_b: solana_pubkey::Pubkey,
57 pub fusionamm_program: solana_pubkey::Pubkey,
64
65
66 pub fusion_pool: solana_pubkey::Pubkey,
67
68
69 pub fusion_position: solana_pubkey::Pubkey,
70
71
72 pub memo_program: solana_pubkey::Pubkey,
73 }
74
75impl CollectFeesFusion {
76 pub fn instruction(&self, args: CollectFeesFusionInstructionArgs) -> solana_instruction::Instruction {
77 self.instruction_with_remaining_accounts(args, &[])
78 }
79 #[allow(clippy::arithmetic_side_effects)]
80 #[allow(clippy::vec_init_then_push)]
81 pub fn instruction_with_remaining_accounts(&self, args: CollectFeesFusionInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
82 let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
83 accounts.push(solana_instruction::AccountMeta::new(
84 self.authority,
85 true
86 ));
87 accounts.push(solana_instruction::AccountMeta::new_readonly(
88 self.tuna_config,
89 false
90 ));
91 accounts.push(solana_instruction::AccountMeta::new_readonly(
92 self.mint_a,
93 false
94 ));
95 accounts.push(solana_instruction::AccountMeta::new_readonly(
96 self.mint_b,
97 false
98 ));
99 accounts.push(solana_instruction::AccountMeta::new_readonly(
100 self.token_program_a,
101 false
102 ));
103 accounts.push(solana_instruction::AccountMeta::new_readonly(
104 self.token_program_b,
105 false
106 ));
107 accounts.push(solana_instruction::AccountMeta::new(
108 self.tuna_position,
109 false
110 ));
111 accounts.push(solana_instruction::AccountMeta::new_readonly(
112 self.tuna_position_ata,
113 false
114 ));
115 accounts.push(solana_instruction::AccountMeta::new(
116 self.tuna_position_ata_a,
117 false
118 ));
119 accounts.push(solana_instruction::AccountMeta::new(
120 self.tuna_position_ata_b,
121 false
122 ));
123 accounts.push(solana_instruction::AccountMeta::new(
124 self.tuna_position_owner_ata_a,
125 false
126 ));
127 accounts.push(solana_instruction::AccountMeta::new(
128 self.tuna_position_owner_ata_b,
129 false
130 ));
131 accounts.push(solana_instruction::AccountMeta::new_readonly(
132 self.fusionamm_program,
133 false
134 ));
135 accounts.push(solana_instruction::AccountMeta::new(
136 self.fusion_pool,
137 false
138 ));
139 accounts.push(solana_instruction::AccountMeta::new(
140 self.fusion_position,
141 false
142 ));
143 accounts.push(solana_instruction::AccountMeta::new_readonly(
144 self.memo_program,
145 false
146 ));
147 accounts.extend_from_slice(remaining_accounts);
148 let mut data = borsh::to_vec(&CollectFeesFusionInstructionData::new()).unwrap();
149 let mut args = borsh::to_vec(&args).unwrap();
150 data.append(&mut args);
151
152 solana_instruction::Instruction {
153 program_id: crate::TUNA_ID,
154 accounts,
155 data,
156 }
157 }
158}
159
160#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
161#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
162 pub struct CollectFeesFusionInstructionData {
163 discriminator: [u8; 8],
164 }
165
166impl CollectFeesFusionInstructionData {
167 pub fn new() -> Self {
168 Self {
169 discriminator: [52, 219, 25, 250, 31, 203, 9, 129],
170 }
171 }
172}
173
174impl Default for CollectFeesFusionInstructionData {
175 fn default() -> Self {
176 Self::new()
177 }
178}
179
180#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
181#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
182 pub struct CollectFeesFusionInstructionArgs {
183 pub remaining_accounts_info: RemainingAccountsInfo,
184 }
185
186
187#[derive(Clone, Debug, Default)]
208pub struct CollectFeesFusionBuilder {
209 authority: Option<solana_pubkey::Pubkey>,
210 tuna_config: Option<solana_pubkey::Pubkey>,
211 mint_a: Option<solana_pubkey::Pubkey>,
212 mint_b: Option<solana_pubkey::Pubkey>,
213 token_program_a: Option<solana_pubkey::Pubkey>,
214 token_program_b: Option<solana_pubkey::Pubkey>,
215 tuna_position: Option<solana_pubkey::Pubkey>,
216 tuna_position_ata: Option<solana_pubkey::Pubkey>,
217 tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
218 tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
219 tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
220 tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
221 fusionamm_program: Option<solana_pubkey::Pubkey>,
222 fusion_pool: Option<solana_pubkey::Pubkey>,
223 fusion_position: Option<solana_pubkey::Pubkey>,
224 memo_program: Option<solana_pubkey::Pubkey>,
225 remaining_accounts_info: Option<RemainingAccountsInfo>,
226 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
227}
228
229impl CollectFeesFusionBuilder {
230 pub fn new() -> Self {
231 Self::default()
232 }
233 #[inline(always)]
237 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
238 self.authority = Some(authority);
239 self
240 }
241 #[inline(always)]
242 pub fn tuna_config(&mut self, tuna_config: solana_pubkey::Pubkey) -> &mut Self {
243 self.tuna_config = Some(tuna_config);
244 self
245 }
246 #[inline(always)]
247 pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
248 self.mint_a = Some(mint_a);
249 self
250 }
251 #[inline(always)]
252 pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
253 self.mint_b = Some(mint_b);
254 self
255 }
256 #[inline(always)]
257 pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
258 self.token_program_a = Some(token_program_a);
259 self
260 }
261 #[inline(always)]
262 pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
263 self.token_program_b = Some(token_program_b);
264 self
265 }
266 #[inline(always)]
267 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
268 self.tuna_position = Some(tuna_position);
269 self
270 }
271 #[inline(always)]
272 pub fn tuna_position_ata(&mut self, tuna_position_ata: solana_pubkey::Pubkey) -> &mut Self {
273 self.tuna_position_ata = Some(tuna_position_ata);
274 self
275 }
276 #[inline(always)]
277 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
278 self.tuna_position_ata_a = Some(tuna_position_ata_a);
279 self
280 }
281 #[inline(always)]
282 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
283 self.tuna_position_ata_b = Some(tuna_position_ata_b);
284 self
285 }
286 #[inline(always)]
287 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_pubkey::Pubkey) -> &mut Self {
288 self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
289 self
290 }
291 #[inline(always)]
292 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_pubkey::Pubkey) -> &mut Self {
293 self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
294 self
295 }
296 #[inline(always)]
300 pub fn fusionamm_program(&mut self, fusionamm_program: solana_pubkey::Pubkey) -> &mut Self {
301 self.fusionamm_program = Some(fusionamm_program);
302 self
303 }
304 #[inline(always)]
305 pub fn fusion_pool(&mut self, fusion_pool: solana_pubkey::Pubkey) -> &mut Self {
306 self.fusion_pool = Some(fusion_pool);
307 self
308 }
309 #[inline(always)]
310 pub fn fusion_position(&mut self, fusion_position: solana_pubkey::Pubkey) -> &mut Self {
311 self.fusion_position = Some(fusion_position);
312 self
313 }
314 #[inline(always)]
315 pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
316 self.memo_program = Some(memo_program);
317 self
318 }
319 #[inline(always)]
320 pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
321 self.remaining_accounts_info = Some(remaining_accounts_info);
322 self
323 }
324 #[inline(always)]
326 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
327 self.__remaining_accounts.push(account);
328 self
329 }
330 #[inline(always)]
332 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
333 self.__remaining_accounts.extend_from_slice(accounts);
334 self
335 }
336 #[allow(clippy::clone_on_copy)]
337 pub fn instruction(&self) -> solana_instruction::Instruction {
338 let accounts = CollectFeesFusion {
339 authority: self.authority.expect("authority is not set"),
340 tuna_config: self.tuna_config.expect("tuna_config is not set"),
341 mint_a: self.mint_a.expect("mint_a is not set"),
342 mint_b: self.mint_b.expect("mint_b is not set"),
343 token_program_a: self.token_program_a.expect("token_program_a is not set"),
344 token_program_b: self.token_program_b.expect("token_program_b is not set"),
345 tuna_position: self.tuna_position.expect("tuna_position is not set"),
346 tuna_position_ata: self.tuna_position_ata.expect("tuna_position_ata is not set"),
347 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
348 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
349 tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
350 tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
351 fusionamm_program: self.fusionamm_program.expect("fusionamm_program is not set"),
352 fusion_pool: self.fusion_pool.expect("fusion_pool is not set"),
353 fusion_position: self.fusion_position.expect("fusion_position is not set"),
354 memo_program: self.memo_program.expect("memo_program is not set"),
355 };
356 let args = CollectFeesFusionInstructionArgs {
357 remaining_accounts_info: self.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
358 };
359
360 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
361 }
362}
363
364 pub struct CollectFeesFusionCpiAccounts<'a, 'b> {
366 pub authority: &'b solana_account_info::AccountInfo<'a>,
373
374
375 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
376
377
378 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
379
380
381 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
382
383
384 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
385
386
387 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
388
389
390 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
391
392
393 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
394
395
396 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
397
398
399 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
400
401
402 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
403
404
405 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
406 pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
413
414
415 pub fusion_pool: &'b solana_account_info::AccountInfo<'a>,
416
417
418 pub fusion_position: &'b solana_account_info::AccountInfo<'a>,
419
420
421 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
422 }
423
424pub struct CollectFeesFusionCpi<'a, 'b> {
426 pub __program: &'b solana_account_info::AccountInfo<'a>,
428 pub authority: &'b solana_account_info::AccountInfo<'a>,
435
436
437 pub tuna_config: &'b solana_account_info::AccountInfo<'a>,
438
439
440 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
441
442
443 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
444
445
446 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
447
448
449 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
450
451
452 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
453
454
455 pub tuna_position_ata: &'b solana_account_info::AccountInfo<'a>,
456
457
458 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
459
460
461 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
462
463
464 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
465
466
467 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
468 pub fusionamm_program: &'b solana_account_info::AccountInfo<'a>,
475
476
477 pub fusion_pool: &'b solana_account_info::AccountInfo<'a>,
478
479
480 pub fusion_position: &'b solana_account_info::AccountInfo<'a>,
481
482
483 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
484 pub __args: CollectFeesFusionInstructionArgs,
486 }
487
488impl<'a, 'b> CollectFeesFusionCpi<'a, 'b> {
489 pub fn new(
490 program: &'b solana_account_info::AccountInfo<'a>,
491 accounts: CollectFeesFusionCpiAccounts<'a, 'b>,
492 args: CollectFeesFusionInstructionArgs,
493 ) -> Self {
494 Self {
495 __program: program,
496 authority: accounts.authority,
497 tuna_config: accounts.tuna_config,
498 mint_a: accounts.mint_a,
499 mint_b: accounts.mint_b,
500 token_program_a: accounts.token_program_a,
501 token_program_b: accounts.token_program_b,
502 tuna_position: accounts.tuna_position,
503 tuna_position_ata: accounts.tuna_position_ata,
504 tuna_position_ata_a: accounts.tuna_position_ata_a,
505 tuna_position_ata_b: accounts.tuna_position_ata_b,
506 tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
507 tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
508 fusionamm_program: accounts.fusionamm_program,
509 fusion_pool: accounts.fusion_pool,
510 fusion_position: accounts.fusion_position,
511 memo_program: accounts.memo_program,
512 __args: args,
513 }
514 }
515 #[inline(always)]
516 pub fn invoke(&self) -> solana_program_error::ProgramResult {
517 self.invoke_signed_with_remaining_accounts(&[], &[])
518 }
519 #[inline(always)]
520 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
521 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
522 }
523 #[inline(always)]
524 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
525 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
526 }
527 #[allow(clippy::arithmetic_side_effects)]
528 #[allow(clippy::clone_on_copy)]
529 #[allow(clippy::vec_init_then_push)]
530 pub fn invoke_signed_with_remaining_accounts(
531 &self,
532 signers_seeds: &[&[&[u8]]],
533 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
534 ) -> solana_program_error::ProgramResult {
535 let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
536 accounts.push(solana_instruction::AccountMeta::new(
537 *self.authority.key,
538 true
539 ));
540 accounts.push(solana_instruction::AccountMeta::new_readonly(
541 *self.tuna_config.key,
542 false
543 ));
544 accounts.push(solana_instruction::AccountMeta::new_readonly(
545 *self.mint_a.key,
546 false
547 ));
548 accounts.push(solana_instruction::AccountMeta::new_readonly(
549 *self.mint_b.key,
550 false
551 ));
552 accounts.push(solana_instruction::AccountMeta::new_readonly(
553 *self.token_program_a.key,
554 false
555 ));
556 accounts.push(solana_instruction::AccountMeta::new_readonly(
557 *self.token_program_b.key,
558 false
559 ));
560 accounts.push(solana_instruction::AccountMeta::new(
561 *self.tuna_position.key,
562 false
563 ));
564 accounts.push(solana_instruction::AccountMeta::new_readonly(
565 *self.tuna_position_ata.key,
566 false
567 ));
568 accounts.push(solana_instruction::AccountMeta::new(
569 *self.tuna_position_ata_a.key,
570 false
571 ));
572 accounts.push(solana_instruction::AccountMeta::new(
573 *self.tuna_position_ata_b.key,
574 false
575 ));
576 accounts.push(solana_instruction::AccountMeta::new(
577 *self.tuna_position_owner_ata_a.key,
578 false
579 ));
580 accounts.push(solana_instruction::AccountMeta::new(
581 *self.tuna_position_owner_ata_b.key,
582 false
583 ));
584 accounts.push(solana_instruction::AccountMeta::new_readonly(
585 *self.fusionamm_program.key,
586 false
587 ));
588 accounts.push(solana_instruction::AccountMeta::new(
589 *self.fusion_pool.key,
590 false
591 ));
592 accounts.push(solana_instruction::AccountMeta::new(
593 *self.fusion_position.key,
594 false
595 ));
596 accounts.push(solana_instruction::AccountMeta::new_readonly(
597 *self.memo_program.key,
598 false
599 ));
600 remaining_accounts.iter().for_each(|remaining_account| {
601 accounts.push(solana_instruction::AccountMeta {
602 pubkey: *remaining_account.0.key,
603 is_signer: remaining_account.1,
604 is_writable: remaining_account.2,
605 })
606 });
607 let mut data = borsh::to_vec(&CollectFeesFusionInstructionData::new()).unwrap();
608 let mut args = borsh::to_vec(&self.__args).unwrap();
609 data.append(&mut args);
610
611 let instruction = solana_instruction::Instruction {
612 program_id: crate::TUNA_ID,
613 accounts,
614 data,
615 };
616 let mut account_infos = Vec::with_capacity(17 + remaining_accounts.len());
617 account_infos.push(self.__program.clone());
618 account_infos.push(self.authority.clone());
619 account_infos.push(self.tuna_config.clone());
620 account_infos.push(self.mint_a.clone());
621 account_infos.push(self.mint_b.clone());
622 account_infos.push(self.token_program_a.clone());
623 account_infos.push(self.token_program_b.clone());
624 account_infos.push(self.tuna_position.clone());
625 account_infos.push(self.tuna_position_ata.clone());
626 account_infos.push(self.tuna_position_ata_a.clone());
627 account_infos.push(self.tuna_position_ata_b.clone());
628 account_infos.push(self.tuna_position_owner_ata_a.clone());
629 account_infos.push(self.tuna_position_owner_ata_b.clone());
630 account_infos.push(self.fusionamm_program.clone());
631 account_infos.push(self.fusion_pool.clone());
632 account_infos.push(self.fusion_position.clone());
633 account_infos.push(self.memo_program.clone());
634 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
635
636 if signers_seeds.is_empty() {
637 solana_cpi::invoke(&instruction, &account_infos)
638 } else {
639 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
640 }
641 }
642}
643
644#[derive(Clone, Debug)]
665pub struct CollectFeesFusionCpiBuilder<'a, 'b> {
666 instruction: Box<CollectFeesFusionCpiBuilderInstruction<'a, 'b>>,
667}
668
669impl<'a, 'b> CollectFeesFusionCpiBuilder<'a, 'b> {
670 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
671 let instruction = Box::new(CollectFeesFusionCpiBuilderInstruction {
672 __program: program,
673 authority: None,
674 tuna_config: None,
675 mint_a: None,
676 mint_b: None,
677 token_program_a: None,
678 token_program_b: None,
679 tuna_position: None,
680 tuna_position_ata: None,
681 tuna_position_ata_a: None,
682 tuna_position_ata_b: None,
683 tuna_position_owner_ata_a: None,
684 tuna_position_owner_ata_b: None,
685 fusionamm_program: None,
686 fusion_pool: None,
687 fusion_position: None,
688 memo_program: None,
689 remaining_accounts_info: None,
690 __remaining_accounts: Vec::new(),
691 });
692 Self { instruction }
693 }
694 #[inline(always)]
698 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
699 self.instruction.authority = Some(authority);
700 self
701 }
702 #[inline(always)]
703 pub fn tuna_config(&mut self, tuna_config: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
704 self.instruction.tuna_config = Some(tuna_config);
705 self
706 }
707 #[inline(always)]
708 pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
709 self.instruction.mint_a = Some(mint_a);
710 self
711 }
712 #[inline(always)]
713 pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
714 self.instruction.mint_b = Some(mint_b);
715 self
716 }
717 #[inline(always)]
718 pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
719 self.instruction.token_program_a = Some(token_program_a);
720 self
721 }
722 #[inline(always)]
723 pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
724 self.instruction.token_program_b = Some(token_program_b);
725 self
726 }
727 #[inline(always)]
728 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
729 self.instruction.tuna_position = Some(tuna_position);
730 self
731 }
732 #[inline(always)]
733 pub fn tuna_position_ata(&mut self, tuna_position_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
734 self.instruction.tuna_position_ata = Some(tuna_position_ata);
735 self
736 }
737 #[inline(always)]
738 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
739 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
740 self
741 }
742 #[inline(always)]
743 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
744 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
745 self
746 }
747 #[inline(always)]
748 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
749 self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
750 self
751 }
752 #[inline(always)]
753 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
754 self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
755 self
756 }
757 #[inline(always)]
761 pub fn fusionamm_program(&mut self, fusionamm_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
762 self.instruction.fusionamm_program = Some(fusionamm_program);
763 self
764 }
765 #[inline(always)]
766 pub fn fusion_pool(&mut self, fusion_pool: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
767 self.instruction.fusion_pool = Some(fusion_pool);
768 self
769 }
770 #[inline(always)]
771 pub fn fusion_position(&mut self, fusion_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
772 self.instruction.fusion_position = Some(fusion_position);
773 self
774 }
775 #[inline(always)]
776 pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
777 self.instruction.memo_program = Some(memo_program);
778 self
779 }
780 #[inline(always)]
781 pub fn remaining_accounts_info(&mut self, remaining_accounts_info: RemainingAccountsInfo) -> &mut Self {
782 self.instruction.remaining_accounts_info = Some(remaining_accounts_info);
783 self
784 }
785 #[inline(always)]
787 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
788 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
789 self
790 }
791 #[inline(always)]
796 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
797 self.instruction.__remaining_accounts.extend_from_slice(accounts);
798 self
799 }
800 #[inline(always)]
801 pub fn invoke(&self) -> solana_program_error::ProgramResult {
802 self.invoke_signed(&[])
803 }
804 #[allow(clippy::clone_on_copy)]
805 #[allow(clippy::vec_init_then_push)]
806 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
807 let args = CollectFeesFusionInstructionArgs {
808 remaining_accounts_info: self.instruction.remaining_accounts_info.clone().expect("remaining_accounts_info is not set"),
809 };
810 let instruction = CollectFeesFusionCpi {
811 __program: self.instruction.__program,
812
813 authority: self.instruction.authority.expect("authority is not set"),
814
815 tuna_config: self.instruction.tuna_config.expect("tuna_config is not set"),
816
817 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
818
819 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
820
821 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
822
823 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
824
825 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
826
827 tuna_position_ata: self.instruction.tuna_position_ata.expect("tuna_position_ata is not set"),
828
829 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
830
831 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
832
833 tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
834
835 tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
836
837 fusionamm_program: self.instruction.fusionamm_program.expect("fusionamm_program is not set"),
838
839 fusion_pool: self.instruction.fusion_pool.expect("fusion_pool is not set"),
840
841 fusion_position: self.instruction.fusion_position.expect("fusion_position is not set"),
842
843 memo_program: self.instruction.memo_program.expect("memo_program is not set"),
844 __args: args,
845 };
846 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
847 }
848}
849
850#[derive(Clone, Debug)]
851struct CollectFeesFusionCpiBuilderInstruction<'a, 'b> {
852 __program: &'b solana_account_info::AccountInfo<'a>,
853 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
854 tuna_config: Option<&'b solana_account_info::AccountInfo<'a>>,
855 mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
856 mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
857 token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
858 token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
859 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
860 tuna_position_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
861 tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
862 tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
863 tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
864 tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
865 fusionamm_program: Option<&'b solana_account_info::AccountInfo<'a>>,
866 fusion_pool: Option<&'b solana_account_info::AccountInfo<'a>>,
867 fusion_position: Option<&'b solana_account_info::AccountInfo<'a>>,
868 memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
869 remaining_accounts_info: Option<RemainingAccountsInfo>,
870 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
872}
873