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
74impl RepayTunaLpPositionDebt {
75 pub fn instruction(&self, args: RepayTunaLpPositionDebtInstructionArgs) -> solana_instruction::Instruction {
76 self.instruction_with_remaining_accounts(args, &[])
77 }
78 #[allow(clippy::arithmetic_side_effects)]
79 #[allow(clippy::vec_init_then_push)]
80 pub fn instruction_with_remaining_accounts(&self, args: RepayTunaLpPositionDebtInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
81 let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
82 accounts.push(solana_instruction::AccountMeta::new(
83 self.authority,
84 true
85 ));
86 accounts.push(solana_instruction::AccountMeta::new_readonly(
87 self.mint_a,
88 false
89 ));
90 accounts.push(solana_instruction::AccountMeta::new_readonly(
91 self.mint_b,
92 false
93 ));
94 accounts.push(solana_instruction::AccountMeta::new(
95 self.market,
96 false
97 ));
98 accounts.push(solana_instruction::AccountMeta::new(
99 self.vault_a,
100 false
101 ));
102 accounts.push(solana_instruction::AccountMeta::new(
103 self.vault_b,
104 false
105 ));
106 accounts.push(solana_instruction::AccountMeta::new(
107 self.vault_a_ata,
108 false
109 ));
110 accounts.push(solana_instruction::AccountMeta::new(
111 self.vault_b_ata,
112 false
113 ));
114 accounts.push(solana_instruction::AccountMeta::new(
115 self.tuna_position,
116 false
117 ));
118 accounts.push(solana_instruction::AccountMeta::new(
119 self.tuna_position_ata_a,
120 false
121 ));
122 accounts.push(solana_instruction::AccountMeta::new(
123 self.tuna_position_ata_b,
124 false
125 ));
126 accounts.push(solana_instruction::AccountMeta::new(
127 self.tuna_position_owner_ata_a,
128 false
129 ));
130 accounts.push(solana_instruction::AccountMeta::new(
131 self.tuna_position_owner_ata_b,
132 false
133 ));
134 accounts.push(solana_instruction::AccountMeta::new_readonly(
135 self.token_program_a,
136 false
137 ));
138 accounts.push(solana_instruction::AccountMeta::new_readonly(
139 self.token_program_b,
140 false
141 ));
142 accounts.push(solana_instruction::AccountMeta::new_readonly(
143 self.memo_program,
144 false
145 ));
146 accounts.extend_from_slice(remaining_accounts);
147 let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
148 let mut args = borsh::to_vec(&args).unwrap();
149 data.append(&mut args);
150
151 solana_instruction::Instruction {
152 program_id: crate::TUNA_ID,
153 accounts,
154 data,
155 }
156 }
157}
158
159#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
160#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
161 pub struct RepayTunaLpPositionDebtInstructionData {
162 discriminator: [u8; 8],
163 }
164
165impl RepayTunaLpPositionDebtInstructionData {
166 pub fn new() -> Self {
167 Self {
168 discriminator: [79, 200, 30, 15, 252, 22, 162, 8],
169 }
170 }
171}
172
173impl Default for RepayTunaLpPositionDebtInstructionData {
174 fn default() -> Self {
175 Self::new()
176 }
177}
178
179#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
180#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
181 pub struct RepayTunaLpPositionDebtInstructionArgs {
182 pub collateral_funds_a: u64,
183 pub collateral_funds_b: u64,
184 }
185
186
187#[derive(Clone, Debug, Default)]
208pub struct RepayTunaLpPositionDebtBuilder {
209 authority: Option<solana_pubkey::Pubkey>,
210 mint_a: Option<solana_pubkey::Pubkey>,
211 mint_b: Option<solana_pubkey::Pubkey>,
212 market: Option<solana_pubkey::Pubkey>,
213 vault_a: Option<solana_pubkey::Pubkey>,
214 vault_b: Option<solana_pubkey::Pubkey>,
215 vault_a_ata: Option<solana_pubkey::Pubkey>,
216 vault_b_ata: Option<solana_pubkey::Pubkey>,
217 tuna_position: Option<solana_pubkey::Pubkey>,
218 tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
219 tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
220 tuna_position_owner_ata_a: Option<solana_pubkey::Pubkey>,
221 tuna_position_owner_ata_b: Option<solana_pubkey::Pubkey>,
222 token_program_a: Option<solana_pubkey::Pubkey>,
223 token_program_b: Option<solana_pubkey::Pubkey>,
224 memo_program: Option<solana_pubkey::Pubkey>,
225 collateral_funds_a: Option<u64>,
226 collateral_funds_b: Option<u64>,
227 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
228}
229
230impl RepayTunaLpPositionDebtBuilder {
231 pub fn new() -> Self {
232 Self::default()
233 }
234 #[inline(always)]
238 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
239 self.authority = Some(authority);
240 self
241 }
242 #[inline(always)]
243 pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
244 self.mint_a = Some(mint_a);
245 self
246 }
247 #[inline(always)]
248 pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
249 self.mint_b = Some(mint_b);
250 self
251 }
252 #[inline(always)]
253 pub fn market(&mut self, market: solana_pubkey::Pubkey) -> &mut Self {
254 self.market = Some(market);
255 self
256 }
257 #[inline(always)]
258 pub fn vault_a(&mut self, vault_a: solana_pubkey::Pubkey) -> &mut Self {
259 self.vault_a = Some(vault_a);
260 self
261 }
262 #[inline(always)]
263 pub fn vault_b(&mut self, vault_b: solana_pubkey::Pubkey) -> &mut Self {
264 self.vault_b = Some(vault_b);
265 self
266 }
267 #[inline(always)]
268 pub fn vault_a_ata(&mut self, vault_a_ata: solana_pubkey::Pubkey) -> &mut Self {
269 self.vault_a_ata = Some(vault_a_ata);
270 self
271 }
272 #[inline(always)]
273 pub fn vault_b_ata(&mut self, vault_b_ata: solana_pubkey::Pubkey) -> &mut Self {
274 self.vault_b_ata = Some(vault_b_ata);
275 self
276 }
277 #[inline(always)]
278 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
279 self.tuna_position = Some(tuna_position);
280 self
281 }
282 #[inline(always)]
283 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
284 self.tuna_position_ata_a = Some(tuna_position_ata_a);
285 self
286 }
287 #[inline(always)]
288 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
289 self.tuna_position_ata_b = Some(tuna_position_ata_b);
290 self
291 }
292 #[inline(always)]
293 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: solana_pubkey::Pubkey) -> &mut Self {
294 self.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
295 self
296 }
297 #[inline(always)]
298 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: solana_pubkey::Pubkey) -> &mut Self {
299 self.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
300 self
301 }
302 #[inline(always)]
306 pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
307 self.token_program_a = Some(token_program_a);
308 self
309 }
310 #[inline(always)]
311 pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
312 self.token_program_b = Some(token_program_b);
313 self
314 }
315 #[inline(always)]
316 pub fn memo_program(&mut self, memo_program: solana_pubkey::Pubkey) -> &mut Self {
317 self.memo_program = Some(memo_program);
318 self
319 }
320 #[inline(always)]
321 pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
322 self.collateral_funds_a = Some(collateral_funds_a);
323 self
324 }
325 #[inline(always)]
326 pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
327 self.collateral_funds_b = Some(collateral_funds_b);
328 self
329 }
330 #[inline(always)]
332 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
333 self.__remaining_accounts.push(account);
334 self
335 }
336 #[inline(always)]
338 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
339 self.__remaining_accounts.extend_from_slice(accounts);
340 self
341 }
342 #[allow(clippy::clone_on_copy)]
343 pub fn instruction(&self) -> solana_instruction::Instruction {
344 let accounts = RepayTunaLpPositionDebt {
345 authority: self.authority.expect("authority is not set"),
346 mint_a: self.mint_a.expect("mint_a is not set"),
347 mint_b: self.mint_b.expect("mint_b is not set"),
348 market: self.market.expect("market is not set"),
349 vault_a: self.vault_a.expect("vault_a is not set"),
350 vault_b: self.vault_b.expect("vault_b is not set"),
351 vault_a_ata: self.vault_a_ata.expect("vault_a_ata is not set"),
352 vault_b_ata: self.vault_b_ata.expect("vault_b_ata is not set"),
353 tuna_position: self.tuna_position.expect("tuna_position is not set"),
354 tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
355 tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
356 tuna_position_owner_ata_a: self.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
357 tuna_position_owner_ata_b: self.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
358 token_program_a: self.token_program_a.expect("token_program_a is not set"),
359 token_program_b: self.token_program_b.expect("token_program_b is not set"),
360 memo_program: self.memo_program.expect("memo_program is not set"),
361 };
362 let args = RepayTunaLpPositionDebtInstructionArgs {
363 collateral_funds_a: self.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
364 collateral_funds_b: self.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
365 };
366
367 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
368 }
369}
370
371 pub struct RepayTunaLpPositionDebtCpiAccounts<'a, 'b> {
373 pub authority: &'b solana_account_info::AccountInfo<'a>,
380
381
382 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
383
384
385 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
386
387
388 pub market: &'b solana_account_info::AccountInfo<'a>,
389
390
391 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
392
393
394 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
395
396
397 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
398
399
400 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
401
402
403 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
404
405
406 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
407
408
409 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
410
411
412 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
413
414
415 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
416 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
423
424
425 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
426
427
428 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
429 }
430
431pub struct RepayTunaLpPositionDebtCpi<'a, 'b> {
433 pub __program: &'b solana_account_info::AccountInfo<'a>,
435 pub authority: &'b solana_account_info::AccountInfo<'a>,
442
443
444 pub mint_a: &'b solana_account_info::AccountInfo<'a>,
445
446
447 pub mint_b: &'b solana_account_info::AccountInfo<'a>,
448
449
450 pub market: &'b solana_account_info::AccountInfo<'a>,
451
452
453 pub vault_a: &'b solana_account_info::AccountInfo<'a>,
454
455
456 pub vault_b: &'b solana_account_info::AccountInfo<'a>,
457
458
459 pub vault_a_ata: &'b solana_account_info::AccountInfo<'a>,
460
461
462 pub vault_b_ata: &'b solana_account_info::AccountInfo<'a>,
463
464
465 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
466
467
468 pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
469
470
471 pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
472
473
474 pub tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>,
475
476
477 pub tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>,
478 pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
485
486
487 pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
488
489
490 pub memo_program: &'b solana_account_info::AccountInfo<'a>,
491 pub __args: RepayTunaLpPositionDebtInstructionArgs,
493 }
494
495impl<'a, 'b> RepayTunaLpPositionDebtCpi<'a, 'b> {
496 pub fn new(
497 program: &'b solana_account_info::AccountInfo<'a>,
498 accounts: RepayTunaLpPositionDebtCpiAccounts<'a, 'b>,
499 args: RepayTunaLpPositionDebtInstructionArgs,
500 ) -> Self {
501 Self {
502 __program: program,
503 authority: accounts.authority,
504 mint_a: accounts.mint_a,
505 mint_b: accounts.mint_b,
506 market: accounts.market,
507 vault_a: accounts.vault_a,
508 vault_b: accounts.vault_b,
509 vault_a_ata: accounts.vault_a_ata,
510 vault_b_ata: accounts.vault_b_ata,
511 tuna_position: accounts.tuna_position,
512 tuna_position_ata_a: accounts.tuna_position_ata_a,
513 tuna_position_ata_b: accounts.tuna_position_ata_b,
514 tuna_position_owner_ata_a: accounts.tuna_position_owner_ata_a,
515 tuna_position_owner_ata_b: accounts.tuna_position_owner_ata_b,
516 token_program_a: accounts.token_program_a,
517 token_program_b: accounts.token_program_b,
518 memo_program: accounts.memo_program,
519 __args: args,
520 }
521 }
522 #[inline(always)]
523 pub fn invoke(&self) -> solana_program_error::ProgramResult {
524 self.invoke_signed_with_remaining_accounts(&[], &[])
525 }
526 #[inline(always)]
527 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
528 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
529 }
530 #[inline(always)]
531 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
532 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
533 }
534 #[allow(clippy::arithmetic_side_effects)]
535 #[allow(clippy::clone_on_copy)]
536 #[allow(clippy::vec_init_then_push)]
537 pub fn invoke_signed_with_remaining_accounts(
538 &self,
539 signers_seeds: &[&[&[u8]]],
540 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
541 ) -> solana_program_error::ProgramResult {
542 let mut accounts = Vec::with_capacity(16+ remaining_accounts.len());
543 accounts.push(solana_instruction::AccountMeta::new(
544 *self.authority.key,
545 true
546 ));
547 accounts.push(solana_instruction::AccountMeta::new_readonly(
548 *self.mint_a.key,
549 false
550 ));
551 accounts.push(solana_instruction::AccountMeta::new_readonly(
552 *self.mint_b.key,
553 false
554 ));
555 accounts.push(solana_instruction::AccountMeta::new(
556 *self.market.key,
557 false
558 ));
559 accounts.push(solana_instruction::AccountMeta::new(
560 *self.vault_a.key,
561 false
562 ));
563 accounts.push(solana_instruction::AccountMeta::new(
564 *self.vault_b.key,
565 false
566 ));
567 accounts.push(solana_instruction::AccountMeta::new(
568 *self.vault_a_ata.key,
569 false
570 ));
571 accounts.push(solana_instruction::AccountMeta::new(
572 *self.vault_b_ata.key,
573 false
574 ));
575 accounts.push(solana_instruction::AccountMeta::new(
576 *self.tuna_position.key,
577 false
578 ));
579 accounts.push(solana_instruction::AccountMeta::new(
580 *self.tuna_position_ata_a.key,
581 false
582 ));
583 accounts.push(solana_instruction::AccountMeta::new(
584 *self.tuna_position_ata_b.key,
585 false
586 ));
587 accounts.push(solana_instruction::AccountMeta::new(
588 *self.tuna_position_owner_ata_a.key,
589 false
590 ));
591 accounts.push(solana_instruction::AccountMeta::new(
592 *self.tuna_position_owner_ata_b.key,
593 false
594 ));
595 accounts.push(solana_instruction::AccountMeta::new_readonly(
596 *self.token_program_a.key,
597 false
598 ));
599 accounts.push(solana_instruction::AccountMeta::new_readonly(
600 *self.token_program_b.key,
601 false
602 ));
603 accounts.push(solana_instruction::AccountMeta::new_readonly(
604 *self.memo_program.key,
605 false
606 ));
607 remaining_accounts.iter().for_each(|remaining_account| {
608 accounts.push(solana_instruction::AccountMeta {
609 pubkey: *remaining_account.0.key,
610 is_signer: remaining_account.1,
611 is_writable: remaining_account.2,
612 })
613 });
614 let mut data = borsh::to_vec(&RepayTunaLpPositionDebtInstructionData::new()).unwrap();
615 let mut args = borsh::to_vec(&self.__args).unwrap();
616 data.append(&mut args);
617
618 let instruction = solana_instruction::Instruction {
619 program_id: crate::TUNA_ID,
620 accounts,
621 data,
622 };
623 let mut account_infos = Vec::with_capacity(17 + remaining_accounts.len());
624 account_infos.push(self.__program.clone());
625 account_infos.push(self.authority.clone());
626 account_infos.push(self.mint_a.clone());
627 account_infos.push(self.mint_b.clone());
628 account_infos.push(self.market.clone());
629 account_infos.push(self.vault_a.clone());
630 account_infos.push(self.vault_b.clone());
631 account_infos.push(self.vault_a_ata.clone());
632 account_infos.push(self.vault_b_ata.clone());
633 account_infos.push(self.tuna_position.clone());
634 account_infos.push(self.tuna_position_ata_a.clone());
635 account_infos.push(self.tuna_position_ata_b.clone());
636 account_infos.push(self.tuna_position_owner_ata_a.clone());
637 account_infos.push(self.tuna_position_owner_ata_b.clone());
638 account_infos.push(self.token_program_a.clone());
639 account_infos.push(self.token_program_b.clone());
640 account_infos.push(self.memo_program.clone());
641 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
642
643 if signers_seeds.is_empty() {
644 solana_cpi::invoke(&instruction, &account_infos)
645 } else {
646 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
647 }
648 }
649}
650
651#[derive(Clone, Debug)]
672pub struct RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
673 instruction: Box<RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b>>,
674}
675
676impl<'a, 'b> RepayTunaLpPositionDebtCpiBuilder<'a, 'b> {
677 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
678 let instruction = Box::new(RepayTunaLpPositionDebtCpiBuilderInstruction {
679 __program: program,
680 authority: None,
681 mint_a: None,
682 mint_b: None,
683 market: None,
684 vault_a: None,
685 vault_b: None,
686 vault_a_ata: None,
687 vault_b_ata: None,
688 tuna_position: None,
689 tuna_position_ata_a: None,
690 tuna_position_ata_b: None,
691 tuna_position_owner_ata_a: None,
692 tuna_position_owner_ata_b: None,
693 token_program_a: None,
694 token_program_b: None,
695 memo_program: None,
696 collateral_funds_a: None,
697 collateral_funds_b: None,
698 __remaining_accounts: Vec::new(),
699 });
700 Self { instruction }
701 }
702 #[inline(always)]
706 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
707 self.instruction.authority = Some(authority);
708 self
709 }
710 #[inline(always)]
711 pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
712 self.instruction.mint_a = Some(mint_a);
713 self
714 }
715 #[inline(always)]
716 pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
717 self.instruction.mint_b = Some(mint_b);
718 self
719 }
720 #[inline(always)]
721 pub fn market(&mut self, market: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
722 self.instruction.market = Some(market);
723 self
724 }
725 #[inline(always)]
726 pub fn vault_a(&mut self, vault_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
727 self.instruction.vault_a = Some(vault_a);
728 self
729 }
730 #[inline(always)]
731 pub fn vault_b(&mut self, vault_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
732 self.instruction.vault_b = Some(vault_b);
733 self
734 }
735 #[inline(always)]
736 pub fn vault_a_ata(&mut self, vault_a_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
737 self.instruction.vault_a_ata = Some(vault_a_ata);
738 self
739 }
740 #[inline(always)]
741 pub fn vault_b_ata(&mut self, vault_b_ata: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
742 self.instruction.vault_b_ata = Some(vault_b_ata);
743 self
744 }
745 #[inline(always)]
746 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
747 self.instruction.tuna_position = Some(tuna_position);
748 self
749 }
750 #[inline(always)]
751 pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
752 self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
753 self
754 }
755 #[inline(always)]
756 pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
757 self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
758 self
759 }
760 #[inline(always)]
761 pub fn tuna_position_owner_ata_a(&mut self, tuna_position_owner_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
762 self.instruction.tuna_position_owner_ata_a = Some(tuna_position_owner_ata_a);
763 self
764 }
765 #[inline(always)]
766 pub fn tuna_position_owner_ata_b(&mut self, tuna_position_owner_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
767 self.instruction.tuna_position_owner_ata_b = Some(tuna_position_owner_ata_b);
768 self
769 }
770 #[inline(always)]
774 pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
775 self.instruction.token_program_a = Some(token_program_a);
776 self
777 }
778 #[inline(always)]
779 pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
780 self.instruction.token_program_b = Some(token_program_b);
781 self
782 }
783 #[inline(always)]
784 pub fn memo_program(&mut self, memo_program: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
785 self.instruction.memo_program = Some(memo_program);
786 self
787 }
788 #[inline(always)]
789 pub fn collateral_funds_a(&mut self, collateral_funds_a: u64) -> &mut Self {
790 self.instruction.collateral_funds_a = Some(collateral_funds_a);
791 self
792 }
793 #[inline(always)]
794 pub fn collateral_funds_b(&mut self, collateral_funds_b: u64) -> &mut Self {
795 self.instruction.collateral_funds_b = Some(collateral_funds_b);
796 self
797 }
798 #[inline(always)]
800 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
801 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
802 self
803 }
804 #[inline(always)]
809 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
810 self.instruction.__remaining_accounts.extend_from_slice(accounts);
811 self
812 }
813 #[inline(always)]
814 pub fn invoke(&self) -> solana_program_error::ProgramResult {
815 self.invoke_signed(&[])
816 }
817 #[allow(clippy::clone_on_copy)]
818 #[allow(clippy::vec_init_then_push)]
819 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
820 let args = RepayTunaLpPositionDebtInstructionArgs {
821 collateral_funds_a: self.instruction.collateral_funds_a.clone().expect("collateral_funds_a is not set"),
822 collateral_funds_b: self.instruction.collateral_funds_b.clone().expect("collateral_funds_b is not set"),
823 };
824 let instruction = RepayTunaLpPositionDebtCpi {
825 __program: self.instruction.__program,
826
827 authority: self.instruction.authority.expect("authority is not set"),
828
829 mint_a: self.instruction.mint_a.expect("mint_a is not set"),
830
831 mint_b: self.instruction.mint_b.expect("mint_b is not set"),
832
833 market: self.instruction.market.expect("market is not set"),
834
835 vault_a: self.instruction.vault_a.expect("vault_a is not set"),
836
837 vault_b: self.instruction.vault_b.expect("vault_b is not set"),
838
839 vault_a_ata: self.instruction.vault_a_ata.expect("vault_a_ata is not set"),
840
841 vault_b_ata: self.instruction.vault_b_ata.expect("vault_b_ata is not set"),
842
843 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
844
845 tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
846
847 tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
848
849 tuna_position_owner_ata_a: self.instruction.tuna_position_owner_ata_a.expect("tuna_position_owner_ata_a is not set"),
850
851 tuna_position_owner_ata_b: self.instruction.tuna_position_owner_ata_b.expect("tuna_position_owner_ata_b is not set"),
852
853 token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
854
855 token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
856
857 memo_program: self.instruction.memo_program.expect("memo_program is not set"),
858 __args: args,
859 };
860 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
861 }
862}
863
864#[derive(Clone, Debug)]
865struct RepayTunaLpPositionDebtCpiBuilderInstruction<'a, 'b> {
866 __program: &'b solana_account_info::AccountInfo<'a>,
867 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
868 mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
869 mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
870 market: Option<&'b solana_account_info::AccountInfo<'a>>,
871 vault_a: Option<&'b solana_account_info::AccountInfo<'a>>,
872 vault_b: Option<&'b solana_account_info::AccountInfo<'a>>,
873 vault_a_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
874 vault_b_ata: Option<&'b solana_account_info::AccountInfo<'a>>,
875 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
876 tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
877 tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
878 tuna_position_owner_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
879 tuna_position_owner_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
880 token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
881 token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
882 memo_program: Option<&'b solana_account_info::AccountInfo<'a>>,
883 collateral_funds_a: Option<u64>,
884 collateral_funds_b: Option<u64>,
885 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
887}
888