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