1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const REPAY_TUNA_LP_POSITION_DEBT_DISCRIMINATOR: [u8; 8] = [79, 200, 30, 15, 252, 22, 162, 8];
12
13#[derive(Debug)]
15pub struct RepayTunaLpPositionDebt {
16 pub authority: solana_pubkey::Pubkey,
23
24
25 pub mint_a: solana_pubkey::Pubkey,
26
27
28 pub mint_b: solana_pubkey::Pubkey,
29
30
31 pub market: solana_pubkey::Pubkey,
32
33
34 pub vault_a: solana_pubkey::Pubkey,
35
36
37 pub vault_b: solana_pubkey::Pubkey,
38
39
40 pub vault_a_ata: solana_pubkey::Pubkey,
41
42
43 pub vault_b_ata: solana_pubkey::Pubkey,
44
45
46 pub tuna_position: solana_pubkey::Pubkey,
47
48
49 pub tuna_position_ata_a: solana_pubkey::Pubkey,
50
51
52 pub tuna_position_ata_b: solana_pubkey::Pubkey,
53
54
55 pub tuna_position_owner_ata_a: solana_pubkey::Pubkey,
56
57
58 pub tuna_position_owner_ata_b: solana_pubkey::Pubkey,
59 pub token_program_a: solana_pubkey::Pubkey,
66
67
68 pub token_program_b: solana_pubkey::Pubkey,
69
70
71 pub memo_program: solana_pubkey::Pubkey,
72
73
74 pub system_program: solana_pubkey::Pubkey,
75 }
76
77impl RepayTunaLpPositionDebt {
78 pub fn instruction(&self, args: RepayTunaLpPositionDebtInstructionArgs) -> solana_instruction::Instruction {
79 self.instruction_with_remaining_accounts(args, &[])
80 }
81 #[allow(clippy::arithmetic_side_effects)]
82 #[allow(clippy::vec_init_then_push)]
83 pub fn instruction_with_remaining_accounts(&self, args: RepayTunaLpPositionDebtInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
84 let mut accounts = Vec::with_capacity(17+ remaining_accounts.len());
85 accounts.push(solana_instruction::AccountMeta::new(
86 self.authority,
87 true
88 ));
89 accounts.push(solana_instruction::AccountMeta::new_readonly(
90 self.mint_a,
91 false
92 ));
93 accounts.push(solana_instruction::AccountMeta::new_readonly(
94 self.mint_b,
95 false
96 ));
97 accounts.push(solana_instruction::AccountMeta::new(
98 self.market,
99 false
100 ));
101 accounts.push(solana_instruction::AccountMeta::new(
102 self.vault_a,
103 false
104 ));
105 accounts.push(solana_instruction::AccountMeta::new(
106 self.vault_b,
107 false
108 ));
109 accounts.push(solana_instruction::AccountMeta::new(
110 self.vault_a_ata,
111 false
112 ));
113 accounts.push(solana_instruction::AccountMeta::new(
114 self.vault_b_ata,
115 false
116 ));
117 accounts.push(solana_instruction::AccountMeta::new(
118 self.tuna_position,
119 false
120 ));
121 accounts.push(solana_instruction::AccountMeta::new(
122 self.tuna_position_ata_a,
123 false
124 ));
125 accounts.push(solana_instruction::AccountMeta::new(
126 self.tuna_position_ata_b,
127 false
128 ));
129 accounts.push(solana_instruction::AccountMeta::new(
130 self.tuna_position_owner_ata_a,
131 false
132 ));
133 accounts.push(solana_instruction::AccountMeta::new(
134 self.tuna_position_owner_ata_b,
135 false
136 ));
137 accounts.push(solana_instruction::AccountMeta::new_readonly(
138 self.token_program_a,
139 false
140 ));
141 accounts.push(solana_instruction::AccountMeta::new_readonly(
142 self.token_program_b,
143 false
144 ));
145 accounts.push(solana_instruction::AccountMeta::new_readonly(
146 self.memo_program,
147 false
148 ));
149 accounts.push(solana_instruction::AccountMeta::new_readonly(
150 self.system_program,
151 false
152 ));
153 accounts.extend_from_slice(remaining_accounts);
154 let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
155 let mut args = borsh::to_vec(&args).unwrap();
156 data.append(&mut args);
157
158 solana_instruction::Instruction {
159 program_id: crate::TUNA_ID,
160 accounts,
161 data,
162 }
163 }
164}
165
166#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
167#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
168 pub struct RepayTunaLpPositionDebtInstructionData {
169 discriminator: [u8; 8],
170 }
171
172impl RepayTunaLpPositionDebtInstructionData {
173 pub fn new() -> Self {
174 Self {
175 discriminator: [79, 200, 30, 15, 252, 22, 162, 8],
176 }
177 }
178}
179
180impl Default for RepayTunaLpPositionDebtInstructionData {
181 fn default() -> Self {
182 Self::new()
183 }
184}
185
186#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
187#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
188 pub struct RepayTunaLpPositionDebtInstructionArgs {
189 pub collateral_funds_a: u64,
190 pub collateral_funds_b: u64,
191 }
192
193
194#[derive(Clone, Debug, Default)]
216pub struct RepayTunaLpPositionDebtBuilder {
217 authority: Option<solana_pubkey::Pubkey>,
218 mint_a: Option<solana_pubkey::Pubkey>,
219 mint_b: Option<solana_pubkey::Pubkey>,
220 market: Option<solana_pubkey::Pubkey>,
221 vault_a: Option<solana_pubkey::Pubkey>,
222 vault_b: Option<solana_pubkey::Pubkey>,
223 vault_a_ata: Option<solana_pubkey::Pubkey>,
224 vault_b_ata: Option<solana_pubkey::Pubkey>,
225 tuna_position: Option<solana_pubkey::Pubkey>,
226 tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
227 tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
228 tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
229 tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
230 token_program_a: Option<solana_pubkey::Pubkey>,
231 token_program_b: Option<solana_pubkey::Pubkey>,
232 memo_program: Option<solana_pubkey::Pubkey>,
233 system_program: Option<solana_pubkey::Pubkey>,
234 collateral_funds_a: Option<u64>,
235 collateral_funds_b: Option<u64>,
236 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
237}
238
239impl RepayTunaLpPositionDebtBuilder {
240 pub fn new() -> Self {
241 Self::default()
242 }
243 #[inline(always)]
247 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
248 self.authority = Some(authority);
249 self
250 }
251 #[inline(always)]
252 pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
253 self.mint_a = Some(mint_a);
254 self
255 }
256 #[inline(always)]
257 pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
258 self.mint_b = Some(mint_b);
259 self
260 }
261 #[inline(always)]
262 pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
263 self.market = Some(market);
264 self
265 }
266 #[inline(always)]
267 pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
268 self.vault_a = Some(vault_a);
269 self
270 }
271 #[inline(always)]
272 pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
273 self.vault_b = Some(vault_b);
274 self
275 }
276 #[inline(always)]
277 pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
278 self.vault_a_ata = Some(vault_a_ata);
279 self
280 }
281 #[inline(always)]
282 pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
283 self.vault_b_ata = Some(vault_b_ata);
284 self
285 }
286 #[inline(always)]
287 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
288 self.tuna_position = Some(tuna_position);
289 self
290 }
291 #[inline(always)]
292 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
293 self.tuna_position_ata_a = Some(tuna_position_ata_a);
294 self
295 }
296 #[inline(always)]
297 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
298 self.tuna_position_ata_b = Some(tuna_position_ata_b);
299 self
300 }
301 #[inline(always)]
302 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_pubkey::Pubkey) -> &mut Self {
303 self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
304 self
305 }
306 #[inline(always)]
307 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_pubkey::Pubkey) -> &mut Self {
308 self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
309 self
310 }
311 #[inline(always)]
315 pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
316 self.token_program_a = Some(token_program_a);
317 self
318 }
319 #[inline(always)]
320 pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
321 self.token_program_b = Some(token_program_b);
322 self
323 }
324 #[inline(always)]
325 pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
326 self.memo_program = Some(memo_program);
327 self
328 }
329 #[inline(always)]
331 pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
332 self.system_program = Some(system_program);
333 self
334 }
335 #[inline(always)]
336 pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
337 self.collateral_funds_a = Some(collateral_funds_a);
338 self
339 }
340 #[inline(always)]
341 pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
342 self.collateral_funds_b = Some(collateral_funds_b);
343 self
344 }
345 #[inline(always)]
347 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
348 self.__remaining_accounts.push(account);
349 self
350 }
351 #[inline(always)]
353 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
354 self.__remaining_accounts.extend_from_slice(accounts);
355 self
356 }
357 #[allow(clippy::clone_on_copy)]
358 pub fn instruction(&self) -> solana_instruction::Instruction {
359 let accounts = RepayTunaLpPositionDebt {
360 authority: self.authority.expect("authority is not set"),
361 mint_a: self.mint_a.expect("mint_a is not set"),
362 mint_b: self.mint_b.expect("mint_b is not set"),
363 market: self.market.expect("market is not set"),
364 vault_a: self.vault_a.expect("vault_a is not set"),
365 vault_b: self.vault_b.expect("vault_b is not set"),
366 vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
367 vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
368 tuna_position: self.tuna_position.expect("tuna_position is not set"),
369 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
370 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
371 tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
372 tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
373 token_program_a: self.token_program_a.expect("token_program_a is not set"),
374 token_program_b: self.token_program_b.expect("token_program_b is not set"),
375 memo_program: self.memo_program.expect("memo_program is not set"),
376 system_program: self.system_program.unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
377 };
378 let args = RepayTunaLpPositionDebtInstructionArgs {
379 collateral_funds_a: self.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
380 collateral_funds_b: self.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
381 };
382
383 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
384 }
385}
386
387 pub struct RepayTunaLpPositionDebtCpiAccounts<'a, 'b> {
389 pub authority: &'b solana_account_info::AccountInfo<'a>,
396
397
398 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
399
400
401 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
402
403
404 pub market: &'b solana_account_info::AccountInfo<'a>,
405
406
407 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
408
409
410 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
411
412
413 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
414
415
416 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
417
418
419 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
420
421
422 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
423
424
425 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
426
427
428 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
429
430
431 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
432 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
439
440
441 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
442
443
444 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
445
446
447 pub system_program: &'b solana_account_info::AccountInfo<'a>,
448 }
449
450pub struct RepayTunaLpPositionDebtCpi<'a, 'b> {
452 pub __program: &'b solana_account_info::AccountInfo<'a>,
454 pub authority: &'b solana_account_info::AccountInfo<'a>,
461
462
463 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
464
465
466 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
467
468
469 pub market: &'b solana_account_info::AccountInfo<'a>,
470
471
472 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
473
474
475 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
476
477
478 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
479
480
481 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
482
483
484 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
485
486
487 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
488
489
490 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
491
492
493 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
494
495
496 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
497 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
504
505
506 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
507
508
509 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
510
511
512 pub system_program: &'b solana_account_info::AccountInfo<'a>,
513 pub __args: RepayTunaLpPositionDebtInstructionArgs,
515 }
516
517impl<'a, 'b> RepayTunaLpPositionDebtCpi<'a, 'b> {
518 pub fn new(
519 program: &'b solana_account_info::AccountInfo<'a>,
520 accounts: RepayTunaLpPositionDebtCpiAccounts<'a, 'b>,
521 args: RepayTunaLpPositionDebtInstructionArgs,
522 ) -> Self {
523 Self {
524 __program: program,
525 authority: accounts.authority,
526 mint_a: accounts.mint_a,
527 mint_b: accounts.mint_b,
528 market: accounts.market,
529 vault_a: accounts.vault_a,
530 vault_b: accounts.vault_b,
531 vault_a_ata: accounts.vault_a_ata,
532 vault_b_ata: accounts.vault_b_ata,
533 tuna_position: accounts.tuna_position,
534 tuna_position_ata_a: accounts.tuna_position_ata_a,
535 tuna_position_ata_b: accounts.tuna_position_ata_b,
536 tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
537 tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
538 token_program_a: accounts.token_program_a,
539 token_program_b: accounts.token_program_b,
540 memo_program: accounts.memo_program,
541 system_program: accounts.system_program,
542 __args: args,
543 }
544 }
545 #[inline(always)]
546 pub fn invoke(&self) -> solana_program_error::ProgramResult {
547 self.invoke_signed_with_remaining_accounts(&[], &[])
548 }
549 #[inline(always)]
550 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
551 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
552 }
553 #[inline(always)]
554 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
555 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
556 }
557 #[allow(clippy::arithmetic_side_effects)]
558 #[allow(clippy::clone_on_copy)]
559 #[allow(clippy::vec_init_then_push)]
560 pub fn invoke_signed_with_remaining_accounts(
561 &self,
562 signers_seeds: &[&[&[u8]]],
563 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
564 ) -> solana_program_error::ProgramResult {
565 let mut accounts = Vec::with_capacity(17+ remaining_accounts.len());
566 accounts.push(solana_instruction::AccountMeta::new(
567 *self.authority.key,
568 true
569 ));
570 accounts.push(solana_instruction::AccountMeta::new_readonly(
571 *self.mint_a.key,
572 false
573 ));
574 accounts.push(solana_instruction::AccountMeta::new_readonly(
575 *self.mint_b.key,
576 false
577 ));
578 accounts.push(solana_instruction::AccountMeta::new(
579 *self.market.key,
580 false
581 ));
582 accounts.push(solana_instruction::AccountMeta::new(
583 *self.vault_a.key,
584 false
585 ));
586 accounts.push(solana_instruction::AccountMeta::new(
587 *self.vault_b.key,
588 false
589 ));
590 accounts.push(solana_instruction::AccountMeta::new(
591 *self.vault_a_ata.key,
592 false
593 ));
594 accounts.push(solana_instruction::AccountMeta::new(
595 *self.vault_b_ata.key,
596 false
597 ));
598 accounts.push(solana_instruction::AccountMeta::new(
599 *self.tuna_position.key,
600 false
601 ));
602 accounts.push(solana_instruction::AccountMeta::new(
603 *self.tuna_position_ata_a.key,
604 false
605 ));
606 accounts.push(solana_instruction::AccountMeta::new(
607 *self.tuna_position_ata_b.key,
608 false
609 ));
610 accounts.push(solana_instruction::AccountMeta::new(
611 *self.tuna_position_owner_ata_a.key,
612 false
613 ));
614 accounts.push(solana_instruction::AccountMeta::new(
615 *self.tuna_position_owner_ata_b.key,
616 false
617 ));
618 accounts.push(solana_instruction::AccountMeta::new_readonly(
619 *self.token_program_a.key,
620 false
621 ));
622 accounts.push(solana_instruction::AccountMeta::new_readonly(
623 *self.token_program_b.key,
624 false
625 ));
626 accounts.push(solana_instruction::AccountMeta::new_readonly(
627 *self.memo_program.key,
628 false
629 ));
630 accounts.push(solana_instruction::AccountMeta::new_readonly(
631 *self.system_program.key,
632 false
633 ));
634 remaining_accounts.iter().for_each(|remaining_account| {
635 accounts.push(solana_instruction::AccountMeta {
636 pubkey: *remaining_account.0.key,
637 is_signer: remaining_account.1,
638 is_writable: remaining_account.2,
639 })
640 });
641 let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
642 let mut args = borsh::to_vec(&self.__args).unwrap();
643 data.append(&mut args);
644
645 let instruction = solana_instruction::Instruction {
646 program_id: crate::TUNA_ID,
647 accounts,
648 data,
649 };
650 let mut account_infos = Vec::with_capacity(18 + remaining_accounts.len());
651 account_infos.push(self.__program.clone());
652 account_infos.push(self.authority.clone());
653 account_infos.push(self.mint_a.clone());
654 account_infos.push(self.mint_b.clone());
655 account_infos.push(self.market.clone());
656 account_infos.push(self.vault_a.clone());
657 account_infos.push(self.vault_b.clone());
658 account_infos.push(self.vault_a_ata.clone());
659 account_infos.push(self.vault_b_ata.clone());
660 account_infos.push(self.tuna_position.clone());
661 account_infos.push(self.tuna_position_ata_a.clone());
662 account_infos.push(self.tuna_position_ata_b.clone());
663 account_infos.push(self.tuna_position_owner_ata_a.clone());
664 account_infos.push(self.tuna_position_owner_ata_b.clone());
665 account_infos.push(self.token_program_a.clone());
666 account_infos.push(self.token_program_b.clone());
667 account_infos.push(self.memo_program.clone());
668 account_infos.push(self.system_program.clone());
669 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
670
671 if signers_seeds.is_empty() {
672 solana_cpi::invoke(&instruction, &account_infos)
673 } else {
674 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
675 }
676 }
677}
678
679#[derive(Clone, Debug)]
701pub struct RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
702 instruction: Box<RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b>>,
703}
704
705impl<'a, 'b> RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
706 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
707 let instruction = Box::new(RepayTunaLpPositionDebtCpiBuilderInstruction {
708 __program: program,
709 authority: None,
710 mint_a: None,
711 mint_b: None,
712 market: None,
713 vault_a: None,
714 vault_b: None,
715 vault_a_ata: None,
716 vault_b_ata: None,
717 tuna_position: None,
718 tuna_position_ata_a: None,
719 tuna_position_ata_b: None,
720 tuna_position_owner_ata_a: None,
721 tuna_position_owner_ata_b: None,
722 token_program_a: None,
723 token_program_b: None,
724 memo_program: None,
725 system_program: None,
726 collateral_funds_a: None,
727 collateral_funds_b: None,
728 __remaining_accounts: Vec::new(),
729 });
730 Self { instruction }
731 }
732 #[inline(always)]
736 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
737 self.instruction.authority = Some(authority);
738 self
739 }
740 #[inline(always)]
741 pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
742 self.instruction.mint_a = Some(mint_a);
743 self
744 }
745 #[inline(always)]
746 pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
747 self.instruction.mint_b = Some(mint_b);
748 self
749 }
750 #[inline(always)]
751 pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
752 self.instruction.market = Some(market);
753 self
754 }
755 #[inline(always)]
756 pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
757 self.instruction.vault_a = Some(vault_a);
758 self
759 }
760 #[inline(always)]
761 pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
762 self.instruction.vault_b = Some(vault_b);
763 self
764 }
765 #[inline(always)]
766 pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
767 self.instruction.vault_a_ata = Some(vault_a_ata);
768 self
769 }
770 #[inline(always)]
771 pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
772 self.instruction.vault_b_ata = Some(vault_b_ata);
773 self
774 }
775 #[inline(always)]
776 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
777 self.instruction.tuna_position = Some(tuna_position);
778 self
779 }
780 #[inline(always)]
781 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
782 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
783 self
784 }
785 #[inline(always)]
786 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
787 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
788 self
789 }
790 #[inline(always)]
791 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
792 self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
793 self
794 }
795 #[inline(always)]
796 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
797 self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
798 self
799 }
800 #[inline(always)]
804 pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
805 self.instruction.token_program_a = Some(token_program_a);
806 self
807 }
808 #[inline(always)]
809 pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
810 self.instruction.token_program_b = Some(token_program_b);
811 self
812 }
813 #[inline(always)]
814 pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
815 self.instruction.memo_program = Some(memo_program);
816 self
817 }
818 #[inline(always)]
819 pub fn system_program(&mut self, system_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
820 self.instruction.system_program = Some(system_program);
821 self
822 }
823 #[inline(always)]
824 pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
825 self.instruction.collateral_funds_a = Some(collateral_funds_a);
826 self
827 }
828 #[inline(always)]
829 pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
830 self.instruction.collateral_funds_b = Some(collateral_funds_b);
831 self
832 }
833 #[inline(always)]
835 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
836 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
837 self
838 }
839 #[inline(always)]
844 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
845 self.instruction.__remaining_accounts.extend_from_slice(accounts);
846 self
847 }
848 #[inline(always)]
849 pub fn invoke(&self) -> solana_program_error::ProgramResult {
850 self.invoke_signed(&[])
851 }
852 #[allow(clippy::clone_on_copy)]
853 #[allow(clippy::vec_init_then_push)]
854 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
855 let args = RepayTunaLpPositionDebtInstructionArgs {
856 collateral_funds_a: self.instruction.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
857 collateral_funds_b: self.instruction.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
858 };
859 let instruction = RepayTunaLpPositionDebtCpi {
860 __program: self.instruction.__program,
861
862 authority: self.instruction.authority.expect("authority is not set"),
863
864 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
865
866 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
867
868 market: self.instruction.market.expect("market is not set"),
869
870 vault_a: self.instruction.vault_a.expect("vault_a is not set"),
871
872 vault_b: self.instruction.vault_b.expect("vault_b is not set"),
873
874 vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
875
876 vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
877
878 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
879
880 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
881
882 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
883
884 tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
885
886 tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
887
888 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
889
890 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
891
892 memo_program: self.instruction.memo_program.expect("memo_program is not set"),
893
894 system_program: self.instruction.system_program.expect("system_program is not set"),
895 __args: args,
896 };
897 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
898 }
899}
900
901#[derive(Clone, Debug)]
902struct RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b> {
903 __program: &'b solana_account_info::AccountInfo<'a>,
904 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
905 mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
906 mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
907 market: Option<&'b solana_account_info::AccountInfo<'a>>,
908 vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
909 vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
910 vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
911 vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
912 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
913 tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
914 tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
915 tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
916 tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
917 token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
918 token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
919 memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
920 system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
921 collateral_funds_a: Option<u64>,
922 collateral_funds_b: Option<u64>,
923 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
925}
926