tensor_marketplace/generated/instructions/
buy_t22_spl.rs

1//! This code was AUTOGENERATED using the kinobi library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun kinobi to update it.
4//!
5//! <https://github.com/kinobi-so/kinobi>
6//!
7
8use borsh::BorshDeserialize;
9use borsh::BorshSerialize;
10
11/// Accounts.
12pub struct BuyT22Spl {
13    pub fee_vault: solana_program::pubkey::Pubkey,
14
15    pub fee_vault_currency_ta: solana_program::pubkey::Pubkey,
16
17    pub buyer: solana_program::pubkey::Pubkey,
18
19    pub buyer_ta: solana_program::pubkey::Pubkey,
20
21    pub list_state: solana_program::pubkey::Pubkey,
22
23    pub list_ta: solana_program::pubkey::Pubkey,
24    /// T22 asset mint.
25    pub mint: solana_program::pubkey::Pubkey,
26    /// SPL token mint of the currency.
27    pub currency: solana_program::pubkey::Pubkey,
28
29    pub owner: solana_program::pubkey::Pubkey,
30
31    pub owner_currency_ta: solana_program::pubkey::Pubkey,
32
33    pub payer: solana_program::pubkey::Pubkey,
34
35    pub payer_currency_ta: solana_program::pubkey::Pubkey,
36
37    pub taker_broker: Option<solana_program::pubkey::Pubkey>,
38
39    pub taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
40
41    pub maker_broker: Option<solana_program::pubkey::Pubkey>,
42
43    pub maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
44
45    pub rent_destination: solana_program::pubkey::Pubkey,
46
47    pub token_program: solana_program::pubkey::Pubkey,
48
49    pub currency_token_program: solana_program::pubkey::Pubkey,
50
51    pub associated_token_program: solana_program::pubkey::Pubkey,
52
53    pub marketplace_program: solana_program::pubkey::Pubkey,
54
55    pub system_program: solana_program::pubkey::Pubkey,
56
57    pub cosigner: Option<solana_program::pubkey::Pubkey>,
58}
59
60impl BuyT22Spl {
61    pub fn instruction(
62        &self,
63        args: BuyT22SplInstructionArgs,
64    ) -> solana_program::instruction::Instruction {
65        self.instruction_with_remaining_accounts(args, &[])
66    }
67    #[allow(clippy::vec_init_then_push)]
68    pub fn instruction_with_remaining_accounts(
69        &self,
70        args: BuyT22SplInstructionArgs,
71        remaining_accounts: &[solana_program::instruction::AccountMeta],
72    ) -> solana_program::instruction::Instruction {
73        let mut accounts = Vec::with_capacity(23 + remaining_accounts.len());
74        accounts.push(solana_program::instruction::AccountMeta::new(
75            self.fee_vault,
76            false,
77        ));
78        accounts.push(solana_program::instruction::AccountMeta::new(
79            self.fee_vault_currency_ta,
80            false,
81        ));
82        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
83            self.buyer, false,
84        ));
85        accounts.push(solana_program::instruction::AccountMeta::new(
86            self.buyer_ta,
87            false,
88        ));
89        accounts.push(solana_program::instruction::AccountMeta::new(
90            self.list_state,
91            false,
92        ));
93        accounts.push(solana_program::instruction::AccountMeta::new(
94            self.list_ta,
95            false,
96        ));
97        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
98            self.mint, false,
99        ));
100        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
101            self.currency,
102            false,
103        ));
104        accounts.push(solana_program::instruction::AccountMeta::new(
105            self.owner, false,
106        ));
107        accounts.push(solana_program::instruction::AccountMeta::new(
108            self.owner_currency_ta,
109            false,
110        ));
111        accounts.push(solana_program::instruction::AccountMeta::new(
112            self.payer, true,
113        ));
114        accounts.push(solana_program::instruction::AccountMeta::new(
115            self.payer_currency_ta,
116            false,
117        ));
118        if let Some(taker_broker) = self.taker_broker {
119            accounts.push(solana_program::instruction::AccountMeta::new(
120                taker_broker,
121                false,
122            ));
123        } else {
124            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
125                crate::TENSOR_MARKETPLACE_ID,
126                false,
127            ));
128        }
129        if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
130            accounts.push(solana_program::instruction::AccountMeta::new(
131                taker_broker_currency_ta,
132                false,
133            ));
134        } else {
135            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
136                crate::TENSOR_MARKETPLACE_ID,
137                false,
138            ));
139        }
140        if let Some(maker_broker) = self.maker_broker {
141            accounts.push(solana_program::instruction::AccountMeta::new(
142                maker_broker,
143                false,
144            ));
145        } else {
146            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
147                crate::TENSOR_MARKETPLACE_ID,
148                false,
149            ));
150        }
151        if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
152            accounts.push(solana_program::instruction::AccountMeta::new(
153                maker_broker_currency_ta,
154                false,
155            ));
156        } else {
157            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
158                crate::TENSOR_MARKETPLACE_ID,
159                false,
160            ));
161        }
162        accounts.push(solana_program::instruction::AccountMeta::new(
163            self.rent_destination,
164            false,
165        ));
166        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
167            self.token_program,
168            false,
169        ));
170        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
171            self.currency_token_program,
172            false,
173        ));
174        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
175            self.associated_token_program,
176            false,
177        ));
178        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
179            self.marketplace_program,
180            false,
181        ));
182        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
183            self.system_program,
184            false,
185        ));
186        if let Some(cosigner) = self.cosigner {
187            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
188                cosigner, true,
189            ));
190        } else {
191            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
192                crate::TENSOR_MARKETPLACE_ID,
193                false,
194            ));
195        }
196        accounts.extend_from_slice(remaining_accounts);
197        let mut data = BuyT22SplInstructionData::new().try_to_vec().unwrap();
198        let mut args = args.try_to_vec().unwrap();
199        data.append(&mut args);
200
201        solana_program::instruction::Instruction {
202            program_id: crate::TENSOR_MARKETPLACE_ID,
203            accounts,
204            data,
205        }
206    }
207}
208
209#[derive(BorshDeserialize, BorshSerialize)]
210pub struct BuyT22SplInstructionData {
211    discriminator: [u8; 8],
212}
213
214impl BuyT22SplInstructionData {
215    pub fn new() -> Self {
216        Self {
217            discriminator: [102, 21, 163, 39, 94, 39, 122, 94],
218        }
219    }
220}
221
222impl Default for BuyT22SplInstructionData {
223    fn default() -> Self {
224        Self::new()
225    }
226}
227
228#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
229#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
230pub struct BuyT22SplInstructionArgs {
231    pub max_amount: u64,
232}
233
234/// Instruction builder for `BuyT22Spl`.
235///
236/// ### Accounts:
237///
238///   0. `[writable]` fee_vault
239///   1. `[writable]` fee_vault_currency_ta
240///   2. `[]` buyer
241///   3. `[writable]` buyer_ta
242///   4. `[writable]` list_state
243///   5. `[writable]` list_ta
244///   6. `[]` mint
245///   7. `[]` currency
246///   8. `[writable]` owner
247///   9. `[writable]` owner_currency_ta
248///   10. `[writable, signer]` payer
249///   11. `[writable]` payer_currency_ta
250///   12. `[writable, optional]` taker_broker
251///   13. `[writable, optional]` taker_broker_currency_ta
252///   14. `[writable, optional]` maker_broker
253///   15. `[writable, optional]` maker_broker_currency_ta
254///   16. `[writable]` rent_destination
255///   17. `[optional]` token_program (default to `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`)
256///   18. `[optional]` currency_token_program (default to `TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA`)
257///   19. `[optional]` associated_token_program (default to `ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL`)
258///   20. `[optional]` marketplace_program (default to `TCMPhJdwDryooaGtiocG1u3xcYbRpiJzb283XfCZsDp`)
259///   21. `[optional]` system_program (default to `11111111111111111111111111111111`)
260///   22. `[signer, optional]` cosigner
261#[derive(Clone, Debug, Default)]
262pub struct BuyT22SplBuilder {
263    fee_vault: Option<solana_program::pubkey::Pubkey>,
264    fee_vault_currency_ta: Option<solana_program::pubkey::Pubkey>,
265    buyer: Option<solana_program::pubkey::Pubkey>,
266    buyer_ta: Option<solana_program::pubkey::Pubkey>,
267    list_state: Option<solana_program::pubkey::Pubkey>,
268    list_ta: Option<solana_program::pubkey::Pubkey>,
269    mint: Option<solana_program::pubkey::Pubkey>,
270    currency: Option<solana_program::pubkey::Pubkey>,
271    owner: Option<solana_program::pubkey::Pubkey>,
272    owner_currency_ta: Option<solana_program::pubkey::Pubkey>,
273    payer: Option<solana_program::pubkey::Pubkey>,
274    payer_currency_ta: Option<solana_program::pubkey::Pubkey>,
275    taker_broker: Option<solana_program::pubkey::Pubkey>,
276    taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
277    maker_broker: Option<solana_program::pubkey::Pubkey>,
278    maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
279    rent_destination: Option<solana_program::pubkey::Pubkey>,
280    token_program: Option<solana_program::pubkey::Pubkey>,
281    currency_token_program: Option<solana_program::pubkey::Pubkey>,
282    associated_token_program: Option<solana_program::pubkey::Pubkey>,
283    marketplace_program: Option<solana_program::pubkey::Pubkey>,
284    system_program: Option<solana_program::pubkey::Pubkey>,
285    cosigner: Option<solana_program::pubkey::Pubkey>,
286    max_amount: Option<u64>,
287    __remaining_accounts: Vec<solana_program::instruction::AccountMeta>,
288}
289
290impl BuyT22SplBuilder {
291    pub fn new() -> Self {
292        Self::default()
293    }
294    #[inline(always)]
295    pub fn fee_vault(&mut self, fee_vault: solana_program::pubkey::Pubkey) -> &mut Self {
296        self.fee_vault = Some(fee_vault);
297        self
298    }
299    #[inline(always)]
300    pub fn fee_vault_currency_ta(
301        &mut self,
302        fee_vault_currency_ta: solana_program::pubkey::Pubkey,
303    ) -> &mut Self {
304        self.fee_vault_currency_ta = Some(fee_vault_currency_ta);
305        self
306    }
307    #[inline(always)]
308    pub fn buyer(&mut self, buyer: solana_program::pubkey::Pubkey) -> &mut Self {
309        self.buyer = Some(buyer);
310        self
311    }
312    #[inline(always)]
313    pub fn buyer_ta(&mut self, buyer_ta: solana_program::pubkey::Pubkey) -> &mut Self {
314        self.buyer_ta = Some(buyer_ta);
315        self
316    }
317    #[inline(always)]
318    pub fn list_state(&mut self, list_state: solana_program::pubkey::Pubkey) -> &mut Self {
319        self.list_state = Some(list_state);
320        self
321    }
322    #[inline(always)]
323    pub fn list_ta(&mut self, list_ta: solana_program::pubkey::Pubkey) -> &mut Self {
324        self.list_ta = Some(list_ta);
325        self
326    }
327    /// T22 asset mint.
328    #[inline(always)]
329    pub fn mint(&mut self, mint: solana_program::pubkey::Pubkey) -> &mut Self {
330        self.mint = Some(mint);
331        self
332    }
333    /// SPL token mint of the currency.
334    #[inline(always)]
335    pub fn currency(&mut self, currency: solana_program::pubkey::Pubkey) -> &mut Self {
336        self.currency = Some(currency);
337        self
338    }
339    #[inline(always)]
340    pub fn owner(&mut self, owner: solana_program::pubkey::Pubkey) -> &mut Self {
341        self.owner = Some(owner);
342        self
343    }
344    #[inline(always)]
345    pub fn owner_currency_ta(
346        &mut self,
347        owner_currency_ta: solana_program::pubkey::Pubkey,
348    ) -> &mut Self {
349        self.owner_currency_ta = Some(owner_currency_ta);
350        self
351    }
352    #[inline(always)]
353    pub fn payer(&mut self, payer: solana_program::pubkey::Pubkey) -> &mut Self {
354        self.payer = Some(payer);
355        self
356    }
357    #[inline(always)]
358    pub fn payer_currency_ta(
359        &mut self,
360        payer_currency_ta: solana_program::pubkey::Pubkey,
361    ) -> &mut Self {
362        self.payer_currency_ta = Some(payer_currency_ta);
363        self
364    }
365    /// `[optional account]`
366    #[inline(always)]
367    pub fn taker_broker(
368        &mut self,
369        taker_broker: Option<solana_program::pubkey::Pubkey>,
370    ) -> &mut Self {
371        self.taker_broker = taker_broker;
372        self
373    }
374    /// `[optional account]`
375    #[inline(always)]
376    pub fn taker_broker_currency_ta(
377        &mut self,
378        taker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
379    ) -> &mut Self {
380        self.taker_broker_currency_ta = taker_broker_currency_ta;
381        self
382    }
383    /// `[optional account]`
384    #[inline(always)]
385    pub fn maker_broker(
386        &mut self,
387        maker_broker: Option<solana_program::pubkey::Pubkey>,
388    ) -> &mut Self {
389        self.maker_broker = maker_broker;
390        self
391    }
392    /// `[optional account]`
393    #[inline(always)]
394    pub fn maker_broker_currency_ta(
395        &mut self,
396        maker_broker_currency_ta: Option<solana_program::pubkey::Pubkey>,
397    ) -> &mut Self {
398        self.maker_broker_currency_ta = maker_broker_currency_ta;
399        self
400    }
401    #[inline(always)]
402    pub fn rent_destination(
403        &mut self,
404        rent_destination: solana_program::pubkey::Pubkey,
405    ) -> &mut Self {
406        self.rent_destination = Some(rent_destination);
407        self
408    }
409    /// `[optional account, default to 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb']`
410    #[inline(always)]
411    pub fn token_program(&mut self, token_program: solana_program::pubkey::Pubkey) -> &mut Self {
412        self.token_program = Some(token_program);
413        self
414    }
415    /// `[optional account, default to 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA']`
416    #[inline(always)]
417    pub fn currency_token_program(
418        &mut self,
419        currency_token_program: solana_program::pubkey::Pubkey,
420    ) -> &mut Self {
421        self.currency_token_program = Some(currency_token_program);
422        self
423    }
424    /// `[optional account, default to 'ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL']`
425    #[inline(always)]
426    pub fn associated_token_program(
427        &mut self,
428        associated_token_program: solana_program::pubkey::Pubkey,
429    ) -> &mut Self {
430        self.associated_token_program = Some(associated_token_program);
431        self
432    }
433    /// `[optional account, default to 'TCMPhJdwDryooaGtiocG1u3xcYbRpiJzb283XfCZsDp']`
434    #[inline(always)]
435    pub fn marketplace_program(
436        &mut self,
437        marketplace_program: solana_program::pubkey::Pubkey,
438    ) -> &mut Self {
439        self.marketplace_program = Some(marketplace_program);
440        self
441    }
442    /// `[optional account, default to '11111111111111111111111111111111']`
443    #[inline(always)]
444    pub fn system_program(&mut self, system_program: solana_program::pubkey::Pubkey) -> &mut Self {
445        self.system_program = Some(system_program);
446        self
447    }
448    /// `[optional account]`
449    #[inline(always)]
450    pub fn cosigner(&mut self, cosigner: Option<solana_program::pubkey::Pubkey>) -> &mut Self {
451        self.cosigner = cosigner;
452        self
453    }
454    #[inline(always)]
455    pub fn max_amount(&mut self, max_amount: u64) -> &mut Self {
456        self.max_amount = Some(max_amount);
457        self
458    }
459    /// Add an aditional account to the instruction.
460    #[inline(always)]
461    pub fn add_remaining_account(
462        &mut self,
463        account: solana_program::instruction::AccountMeta,
464    ) -> &mut Self {
465        self.__remaining_accounts.push(account);
466        self
467    }
468    /// Add additional accounts to the instruction.
469    #[inline(always)]
470    pub fn add_remaining_accounts(
471        &mut self,
472        accounts: &[solana_program::instruction::AccountMeta],
473    ) -> &mut Self {
474        self.__remaining_accounts.extend_from_slice(accounts);
475        self
476    }
477    #[allow(clippy::clone_on_copy)]
478    pub fn instruction(&self) -> solana_program::instruction::Instruction {
479        let accounts =
480            BuyT22Spl {
481                fee_vault: self.fee_vault.expect("fee_vault is not set"),
482                fee_vault_currency_ta: self
483                    .fee_vault_currency_ta
484                    .expect("fee_vault_currency_ta is not set"),
485                buyer: self.buyer.expect("buyer is not set"),
486                buyer_ta: self.buyer_ta.expect("buyer_ta is not set"),
487                list_state: self.list_state.expect("list_state is not set"),
488                list_ta: self.list_ta.expect("list_ta is not set"),
489                mint: self.mint.expect("mint is not set"),
490                currency: self.currency.expect("currency is not set"),
491                owner: self.owner.expect("owner is not set"),
492                owner_currency_ta: self
493                    .owner_currency_ta
494                    .expect("owner_currency_ta is not set"),
495                payer: self.payer.expect("payer is not set"),
496                payer_currency_ta: self
497                    .payer_currency_ta
498                    .expect("payer_currency_ta is not set"),
499                taker_broker: self.taker_broker,
500                taker_broker_currency_ta: self.taker_broker_currency_ta,
501                maker_broker: self.maker_broker,
502                maker_broker_currency_ta: self.maker_broker_currency_ta,
503                rent_destination: self.rent_destination.expect("rent_destination is not set"),
504                token_program: self.token_program.unwrap_or(solana_program::pubkey!(
505                    "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
506                )),
507                currency_token_program: self.currency_token_program.unwrap_or(
508                    solana_program::pubkey!("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
509                ),
510                associated_token_program: self.associated_token_program.unwrap_or(
511                    solana_program::pubkey!("ATokenGPvbdGVxr1b2hvZbsiqW5xWH25efTNsLJA8knL"),
512                ),
513                marketplace_program: self.marketplace_program.unwrap_or(solana_program::pubkey!(
514                    "TCMPhJdwDryooaGtiocG1u3xcYbRpiJzb283XfCZsDp"
515                )),
516                system_program: self
517                    .system_program
518                    .unwrap_or(solana_program::pubkey!("11111111111111111111111111111111")),
519                cosigner: self.cosigner,
520            };
521        let args = BuyT22SplInstructionArgs {
522            max_amount: self.max_amount.clone().expect("max_amount is not set"),
523        };
524
525        accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
526    }
527}
528
529/// `buy_t22_spl` CPI accounts.
530pub struct BuyT22SplCpiAccounts<'a, 'b> {
531    pub fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
532
533    pub fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
534
535    pub buyer: &'b solana_program::account_info::AccountInfo<'a>,
536
537    pub buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
538
539    pub list_state: &'b solana_program::account_info::AccountInfo<'a>,
540
541    pub list_ta: &'b solana_program::account_info::AccountInfo<'a>,
542    /// T22 asset mint.
543    pub mint: &'b solana_program::account_info::AccountInfo<'a>,
544    /// SPL token mint of the currency.
545    pub currency: &'b solana_program::account_info::AccountInfo<'a>,
546
547    pub owner: &'b solana_program::account_info::AccountInfo<'a>,
548
549    pub owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
550
551    pub payer: &'b solana_program::account_info::AccountInfo<'a>,
552
553    pub payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
554
555    pub taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
556
557    pub taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
558
559    pub maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
560
561    pub maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
562
563    pub rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
564
565    pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
566
567    pub currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
568
569    pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
570
571    pub marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
572
573    pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
574
575    pub cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
576}
577
578/// `buy_t22_spl` CPI instruction.
579pub struct BuyT22SplCpi<'a, 'b> {
580    /// The program to invoke.
581    pub __program: &'b solana_program::account_info::AccountInfo<'a>,
582
583    pub fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
584
585    pub fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
586
587    pub buyer: &'b solana_program::account_info::AccountInfo<'a>,
588
589    pub buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
590
591    pub list_state: &'b solana_program::account_info::AccountInfo<'a>,
592
593    pub list_ta: &'b solana_program::account_info::AccountInfo<'a>,
594    /// T22 asset mint.
595    pub mint: &'b solana_program::account_info::AccountInfo<'a>,
596    /// SPL token mint of the currency.
597    pub currency: &'b solana_program::account_info::AccountInfo<'a>,
598
599    pub owner: &'b solana_program::account_info::AccountInfo<'a>,
600
601    pub owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
602
603    pub payer: &'b solana_program::account_info::AccountInfo<'a>,
604
605    pub payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
606
607    pub taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
608
609    pub taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
610
611    pub maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
612
613    pub maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
614
615    pub rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
616
617    pub token_program: &'b solana_program::account_info::AccountInfo<'a>,
618
619    pub currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
620
621    pub associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
622
623    pub marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
624
625    pub system_program: &'b solana_program::account_info::AccountInfo<'a>,
626
627    pub cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
628    /// The arguments for the instruction.
629    pub __args: BuyT22SplInstructionArgs,
630}
631
632impl<'a, 'b> BuyT22SplCpi<'a, 'b> {
633    pub fn new(
634        program: &'b solana_program::account_info::AccountInfo<'a>,
635        accounts: BuyT22SplCpiAccounts<'a, 'b>,
636        args: BuyT22SplInstructionArgs,
637    ) -> Self {
638        Self {
639            __program: program,
640            fee_vault: accounts.fee_vault,
641            fee_vault_currency_ta: accounts.fee_vault_currency_ta,
642            buyer: accounts.buyer,
643            buyer_ta: accounts.buyer_ta,
644            list_state: accounts.list_state,
645            list_ta: accounts.list_ta,
646            mint: accounts.mint,
647            currency: accounts.currency,
648            owner: accounts.owner,
649            owner_currency_ta: accounts.owner_currency_ta,
650            payer: accounts.payer,
651            payer_currency_ta: accounts.payer_currency_ta,
652            taker_broker: accounts.taker_broker,
653            taker_broker_currency_ta: accounts.taker_broker_currency_ta,
654            maker_broker: accounts.maker_broker,
655            maker_broker_currency_ta: accounts.maker_broker_currency_ta,
656            rent_destination: accounts.rent_destination,
657            token_program: accounts.token_program,
658            currency_token_program: accounts.currency_token_program,
659            associated_token_program: accounts.associated_token_program,
660            marketplace_program: accounts.marketplace_program,
661            system_program: accounts.system_program,
662            cosigner: accounts.cosigner,
663            __args: args,
664        }
665    }
666    #[inline(always)]
667    pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
668        self.invoke_signed_with_remaining_accounts(&[], &[])
669    }
670    #[inline(always)]
671    pub fn invoke_with_remaining_accounts(
672        &self,
673        remaining_accounts: &[(
674            &'b solana_program::account_info::AccountInfo<'a>,
675            bool,
676            bool,
677        )],
678    ) -> solana_program::entrypoint::ProgramResult {
679        self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
680    }
681    #[inline(always)]
682    pub fn invoke_signed(
683        &self,
684        signers_seeds: &[&[&[u8]]],
685    ) -> solana_program::entrypoint::ProgramResult {
686        self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
687    }
688    #[allow(clippy::clone_on_copy)]
689    #[allow(clippy::vec_init_then_push)]
690    pub fn invoke_signed_with_remaining_accounts(
691        &self,
692        signers_seeds: &[&[&[u8]]],
693        remaining_accounts: &[(
694            &'b solana_program::account_info::AccountInfo<'a>,
695            bool,
696            bool,
697        )],
698    ) -> solana_program::entrypoint::ProgramResult {
699        let mut accounts = Vec::with_capacity(23 + remaining_accounts.len());
700        accounts.push(solana_program::instruction::AccountMeta::new(
701            *self.fee_vault.key,
702            false,
703        ));
704        accounts.push(solana_program::instruction::AccountMeta::new(
705            *self.fee_vault_currency_ta.key,
706            false,
707        ));
708        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
709            *self.buyer.key,
710            false,
711        ));
712        accounts.push(solana_program::instruction::AccountMeta::new(
713            *self.buyer_ta.key,
714            false,
715        ));
716        accounts.push(solana_program::instruction::AccountMeta::new(
717            *self.list_state.key,
718            false,
719        ));
720        accounts.push(solana_program::instruction::AccountMeta::new(
721            *self.list_ta.key,
722            false,
723        ));
724        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
725            *self.mint.key,
726            false,
727        ));
728        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
729            *self.currency.key,
730            false,
731        ));
732        accounts.push(solana_program::instruction::AccountMeta::new(
733            *self.owner.key,
734            false,
735        ));
736        accounts.push(solana_program::instruction::AccountMeta::new(
737            *self.owner_currency_ta.key,
738            false,
739        ));
740        accounts.push(solana_program::instruction::AccountMeta::new(
741            *self.payer.key,
742            true,
743        ));
744        accounts.push(solana_program::instruction::AccountMeta::new(
745            *self.payer_currency_ta.key,
746            false,
747        ));
748        if let Some(taker_broker) = self.taker_broker {
749            accounts.push(solana_program::instruction::AccountMeta::new(
750                *taker_broker.key,
751                false,
752            ));
753        } else {
754            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
755                crate::TENSOR_MARKETPLACE_ID,
756                false,
757            ));
758        }
759        if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
760            accounts.push(solana_program::instruction::AccountMeta::new(
761                *taker_broker_currency_ta.key,
762                false,
763            ));
764        } else {
765            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
766                crate::TENSOR_MARKETPLACE_ID,
767                false,
768            ));
769        }
770        if let Some(maker_broker) = self.maker_broker {
771            accounts.push(solana_program::instruction::AccountMeta::new(
772                *maker_broker.key,
773                false,
774            ));
775        } else {
776            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
777                crate::TENSOR_MARKETPLACE_ID,
778                false,
779            ));
780        }
781        if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
782            accounts.push(solana_program::instruction::AccountMeta::new(
783                *maker_broker_currency_ta.key,
784                false,
785            ));
786        } else {
787            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
788                crate::TENSOR_MARKETPLACE_ID,
789                false,
790            ));
791        }
792        accounts.push(solana_program::instruction::AccountMeta::new(
793            *self.rent_destination.key,
794            false,
795        ));
796        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
797            *self.token_program.key,
798            false,
799        ));
800        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
801            *self.currency_token_program.key,
802            false,
803        ));
804        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
805            *self.associated_token_program.key,
806            false,
807        ));
808        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
809            *self.marketplace_program.key,
810            false,
811        ));
812        accounts.push(solana_program::instruction::AccountMeta::new_readonly(
813            *self.system_program.key,
814            false,
815        ));
816        if let Some(cosigner) = self.cosigner {
817            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
818                *cosigner.key,
819                true,
820            ));
821        } else {
822            accounts.push(solana_program::instruction::AccountMeta::new_readonly(
823                crate::TENSOR_MARKETPLACE_ID,
824                false,
825            ));
826        }
827        remaining_accounts.iter().for_each(|remaining_account| {
828            accounts.push(solana_program::instruction::AccountMeta {
829                pubkey: *remaining_account.0.key,
830                is_signer: remaining_account.1,
831                is_writable: remaining_account.2,
832            })
833        });
834        let mut data = BuyT22SplInstructionData::new().try_to_vec().unwrap();
835        let mut args = self.__args.try_to_vec().unwrap();
836        data.append(&mut args);
837
838        let instruction = solana_program::instruction::Instruction {
839            program_id: crate::TENSOR_MARKETPLACE_ID,
840            accounts,
841            data,
842        };
843        let mut account_infos = Vec::with_capacity(23 + 1 + remaining_accounts.len());
844        account_infos.push(self.__program.clone());
845        account_infos.push(self.fee_vault.clone());
846        account_infos.push(self.fee_vault_currency_ta.clone());
847        account_infos.push(self.buyer.clone());
848        account_infos.push(self.buyer_ta.clone());
849        account_infos.push(self.list_state.clone());
850        account_infos.push(self.list_ta.clone());
851        account_infos.push(self.mint.clone());
852        account_infos.push(self.currency.clone());
853        account_infos.push(self.owner.clone());
854        account_infos.push(self.owner_currency_ta.clone());
855        account_infos.push(self.payer.clone());
856        account_infos.push(self.payer_currency_ta.clone());
857        if let Some(taker_broker) = self.taker_broker {
858            account_infos.push(taker_broker.clone());
859        }
860        if let Some(taker_broker_currency_ta) = self.taker_broker_currency_ta {
861            account_infos.push(taker_broker_currency_ta.clone());
862        }
863        if let Some(maker_broker) = self.maker_broker {
864            account_infos.push(maker_broker.clone());
865        }
866        if let Some(maker_broker_currency_ta) = self.maker_broker_currency_ta {
867            account_infos.push(maker_broker_currency_ta.clone());
868        }
869        account_infos.push(self.rent_destination.clone());
870        account_infos.push(self.token_program.clone());
871        account_infos.push(self.currency_token_program.clone());
872        account_infos.push(self.associated_token_program.clone());
873        account_infos.push(self.marketplace_program.clone());
874        account_infos.push(self.system_program.clone());
875        if let Some(cosigner) = self.cosigner {
876            account_infos.push(cosigner.clone());
877        }
878        remaining_accounts
879            .iter()
880            .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
881
882        if signers_seeds.is_empty() {
883            solana_program::program::invoke(&instruction, &account_infos)
884        } else {
885            solana_program::program::invoke_signed(&instruction, &account_infos, signers_seeds)
886        }
887    }
888}
889
890/// Instruction builder for `BuyT22Spl` via CPI.
891///
892/// ### Accounts:
893///
894///   0. `[writable]` fee_vault
895///   1. `[writable]` fee_vault_currency_ta
896///   2. `[]` buyer
897///   3. `[writable]` buyer_ta
898///   4. `[writable]` list_state
899///   5. `[writable]` list_ta
900///   6. `[]` mint
901///   7. `[]` currency
902///   8. `[writable]` owner
903///   9. `[writable]` owner_currency_ta
904///   10. `[writable, signer]` payer
905///   11. `[writable]` payer_currency_ta
906///   12. `[writable, optional]` taker_broker
907///   13. `[writable, optional]` taker_broker_currency_ta
908///   14. `[writable, optional]` maker_broker
909///   15. `[writable, optional]` maker_broker_currency_ta
910///   16. `[writable]` rent_destination
911///   17. `[]` token_program
912///   18. `[]` currency_token_program
913///   19. `[]` associated_token_program
914///   20. `[]` marketplace_program
915///   21. `[]` system_program
916///   22. `[signer, optional]` cosigner
917#[derive(Clone, Debug)]
918pub struct BuyT22SplCpiBuilder<'a, 'b> {
919    instruction: Box<BuyT22SplCpiBuilderInstruction<'a, 'b>>,
920}
921
922impl<'a, 'b> BuyT22SplCpiBuilder<'a, 'b> {
923    pub fn new(program: &'b solana_program::account_info::AccountInfo<'a>) -> Self {
924        let instruction = Box::new(BuyT22SplCpiBuilderInstruction {
925            __program: program,
926            fee_vault: None,
927            fee_vault_currency_ta: None,
928            buyer: None,
929            buyer_ta: None,
930            list_state: None,
931            list_ta: None,
932            mint: None,
933            currency: None,
934            owner: None,
935            owner_currency_ta: None,
936            payer: None,
937            payer_currency_ta: None,
938            taker_broker: None,
939            taker_broker_currency_ta: None,
940            maker_broker: None,
941            maker_broker_currency_ta: None,
942            rent_destination: None,
943            token_program: None,
944            currency_token_program: None,
945            associated_token_program: None,
946            marketplace_program: None,
947            system_program: None,
948            cosigner: None,
949            max_amount: None,
950            __remaining_accounts: Vec::new(),
951        });
952        Self { instruction }
953    }
954    #[inline(always)]
955    pub fn fee_vault(
956        &mut self,
957        fee_vault: &'b solana_program::account_info::AccountInfo<'a>,
958    ) -> &mut Self {
959        self.instruction.fee_vault = Some(fee_vault);
960        self
961    }
962    #[inline(always)]
963    pub fn fee_vault_currency_ta(
964        &mut self,
965        fee_vault_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
966    ) -> &mut Self {
967        self.instruction.fee_vault_currency_ta = Some(fee_vault_currency_ta);
968        self
969    }
970    #[inline(always)]
971    pub fn buyer(&mut self, buyer: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
972        self.instruction.buyer = Some(buyer);
973        self
974    }
975    #[inline(always)]
976    pub fn buyer_ta(
977        &mut self,
978        buyer_ta: &'b solana_program::account_info::AccountInfo<'a>,
979    ) -> &mut Self {
980        self.instruction.buyer_ta = Some(buyer_ta);
981        self
982    }
983    #[inline(always)]
984    pub fn list_state(
985        &mut self,
986        list_state: &'b solana_program::account_info::AccountInfo<'a>,
987    ) -> &mut Self {
988        self.instruction.list_state = Some(list_state);
989        self
990    }
991    #[inline(always)]
992    pub fn list_ta(
993        &mut self,
994        list_ta: &'b solana_program::account_info::AccountInfo<'a>,
995    ) -> &mut Self {
996        self.instruction.list_ta = Some(list_ta);
997        self
998    }
999    /// T22 asset mint.
1000    #[inline(always)]
1001    pub fn mint(&mut self, mint: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1002        self.instruction.mint = Some(mint);
1003        self
1004    }
1005    /// SPL token mint of the currency.
1006    #[inline(always)]
1007    pub fn currency(
1008        &mut self,
1009        currency: &'b solana_program::account_info::AccountInfo<'a>,
1010    ) -> &mut Self {
1011        self.instruction.currency = Some(currency);
1012        self
1013    }
1014    #[inline(always)]
1015    pub fn owner(&mut self, owner: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1016        self.instruction.owner = Some(owner);
1017        self
1018    }
1019    #[inline(always)]
1020    pub fn owner_currency_ta(
1021        &mut self,
1022        owner_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
1023    ) -> &mut Self {
1024        self.instruction.owner_currency_ta = Some(owner_currency_ta);
1025        self
1026    }
1027    #[inline(always)]
1028    pub fn payer(&mut self, payer: &'b solana_program::account_info::AccountInfo<'a>) -> &mut Self {
1029        self.instruction.payer = Some(payer);
1030        self
1031    }
1032    #[inline(always)]
1033    pub fn payer_currency_ta(
1034        &mut self,
1035        payer_currency_ta: &'b solana_program::account_info::AccountInfo<'a>,
1036    ) -> &mut Self {
1037        self.instruction.payer_currency_ta = Some(payer_currency_ta);
1038        self
1039    }
1040    /// `[optional account]`
1041    #[inline(always)]
1042    pub fn taker_broker(
1043        &mut self,
1044        taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1045    ) -> &mut Self {
1046        self.instruction.taker_broker = taker_broker;
1047        self
1048    }
1049    /// `[optional account]`
1050    #[inline(always)]
1051    pub fn taker_broker_currency_ta(
1052        &mut self,
1053        taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1054    ) -> &mut Self {
1055        self.instruction.taker_broker_currency_ta = taker_broker_currency_ta;
1056        self
1057    }
1058    /// `[optional account]`
1059    #[inline(always)]
1060    pub fn maker_broker(
1061        &mut self,
1062        maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1063    ) -> &mut Self {
1064        self.instruction.maker_broker = maker_broker;
1065        self
1066    }
1067    /// `[optional account]`
1068    #[inline(always)]
1069    pub fn maker_broker_currency_ta(
1070        &mut self,
1071        maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1072    ) -> &mut Self {
1073        self.instruction.maker_broker_currency_ta = maker_broker_currency_ta;
1074        self
1075    }
1076    #[inline(always)]
1077    pub fn rent_destination(
1078        &mut self,
1079        rent_destination: &'b solana_program::account_info::AccountInfo<'a>,
1080    ) -> &mut Self {
1081        self.instruction.rent_destination = Some(rent_destination);
1082        self
1083    }
1084    #[inline(always)]
1085    pub fn token_program(
1086        &mut self,
1087        token_program: &'b solana_program::account_info::AccountInfo<'a>,
1088    ) -> &mut Self {
1089        self.instruction.token_program = Some(token_program);
1090        self
1091    }
1092    #[inline(always)]
1093    pub fn currency_token_program(
1094        &mut self,
1095        currency_token_program: &'b solana_program::account_info::AccountInfo<'a>,
1096    ) -> &mut Self {
1097        self.instruction.currency_token_program = Some(currency_token_program);
1098        self
1099    }
1100    #[inline(always)]
1101    pub fn associated_token_program(
1102        &mut self,
1103        associated_token_program: &'b solana_program::account_info::AccountInfo<'a>,
1104    ) -> &mut Self {
1105        self.instruction.associated_token_program = Some(associated_token_program);
1106        self
1107    }
1108    #[inline(always)]
1109    pub fn marketplace_program(
1110        &mut self,
1111        marketplace_program: &'b solana_program::account_info::AccountInfo<'a>,
1112    ) -> &mut Self {
1113        self.instruction.marketplace_program = Some(marketplace_program);
1114        self
1115    }
1116    #[inline(always)]
1117    pub fn system_program(
1118        &mut self,
1119        system_program: &'b solana_program::account_info::AccountInfo<'a>,
1120    ) -> &mut Self {
1121        self.instruction.system_program = Some(system_program);
1122        self
1123    }
1124    /// `[optional account]`
1125    #[inline(always)]
1126    pub fn cosigner(
1127        &mut self,
1128        cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1129    ) -> &mut Self {
1130        self.instruction.cosigner = cosigner;
1131        self
1132    }
1133    #[inline(always)]
1134    pub fn max_amount(&mut self, max_amount: u64) -> &mut Self {
1135        self.instruction.max_amount = Some(max_amount);
1136        self
1137    }
1138    /// Add an additional account to the instruction.
1139    #[inline(always)]
1140    pub fn add_remaining_account(
1141        &mut self,
1142        account: &'b solana_program::account_info::AccountInfo<'a>,
1143        is_writable: bool,
1144        is_signer: bool,
1145    ) -> &mut Self {
1146        self.instruction
1147            .__remaining_accounts
1148            .push((account, is_writable, is_signer));
1149        self
1150    }
1151    /// Add additional accounts to the instruction.
1152    ///
1153    /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
1154    /// and a `bool` indicating whether the account is a signer or not.
1155    #[inline(always)]
1156    pub fn add_remaining_accounts(
1157        &mut self,
1158        accounts: &[(
1159            &'b solana_program::account_info::AccountInfo<'a>,
1160            bool,
1161            bool,
1162        )],
1163    ) -> &mut Self {
1164        self.instruction
1165            .__remaining_accounts
1166            .extend_from_slice(accounts);
1167        self
1168    }
1169    #[inline(always)]
1170    pub fn invoke(&self) -> solana_program::entrypoint::ProgramResult {
1171        self.invoke_signed(&[])
1172    }
1173    #[allow(clippy::clone_on_copy)]
1174    #[allow(clippy::vec_init_then_push)]
1175    pub fn invoke_signed(
1176        &self,
1177        signers_seeds: &[&[&[u8]]],
1178    ) -> solana_program::entrypoint::ProgramResult {
1179        let args = BuyT22SplInstructionArgs {
1180            max_amount: self
1181                .instruction
1182                .max_amount
1183                .clone()
1184                .expect("max_amount is not set"),
1185        };
1186        let instruction = BuyT22SplCpi {
1187            __program: self.instruction.__program,
1188
1189            fee_vault: self.instruction.fee_vault.expect("fee_vault is not set"),
1190
1191            fee_vault_currency_ta: self
1192                .instruction
1193                .fee_vault_currency_ta
1194                .expect("fee_vault_currency_ta is not set"),
1195
1196            buyer: self.instruction.buyer.expect("buyer is not set"),
1197
1198            buyer_ta: self.instruction.buyer_ta.expect("buyer_ta is not set"),
1199
1200            list_state: self.instruction.list_state.expect("list_state is not set"),
1201
1202            list_ta: self.instruction.list_ta.expect("list_ta is not set"),
1203
1204            mint: self.instruction.mint.expect("mint is not set"),
1205
1206            currency: self.instruction.currency.expect("currency is not set"),
1207
1208            owner: self.instruction.owner.expect("owner is not set"),
1209
1210            owner_currency_ta: self
1211                .instruction
1212                .owner_currency_ta
1213                .expect("owner_currency_ta is not set"),
1214
1215            payer: self.instruction.payer.expect("payer is not set"),
1216
1217            payer_currency_ta: self
1218                .instruction
1219                .payer_currency_ta
1220                .expect("payer_currency_ta is not set"),
1221
1222            taker_broker: self.instruction.taker_broker,
1223
1224            taker_broker_currency_ta: self.instruction.taker_broker_currency_ta,
1225
1226            maker_broker: self.instruction.maker_broker,
1227
1228            maker_broker_currency_ta: self.instruction.maker_broker_currency_ta,
1229
1230            rent_destination: self
1231                .instruction
1232                .rent_destination
1233                .expect("rent_destination is not set"),
1234
1235            token_program: self
1236                .instruction
1237                .token_program
1238                .expect("token_program is not set"),
1239
1240            currency_token_program: self
1241                .instruction
1242                .currency_token_program
1243                .expect("currency_token_program is not set"),
1244
1245            associated_token_program: self
1246                .instruction
1247                .associated_token_program
1248                .expect("associated_token_program is not set"),
1249
1250            marketplace_program: self
1251                .instruction
1252                .marketplace_program
1253                .expect("marketplace_program is not set"),
1254
1255            system_program: self
1256                .instruction
1257                .system_program
1258                .expect("system_program is not set"),
1259
1260            cosigner: self.instruction.cosigner,
1261            __args: args,
1262        };
1263        instruction.invoke_signed_with_remaining_accounts(
1264            signers_seeds,
1265            &self.instruction.__remaining_accounts,
1266        )
1267    }
1268}
1269
1270#[derive(Clone, Debug)]
1271struct BuyT22SplCpiBuilderInstruction<'a, 'b> {
1272    __program: &'b solana_program::account_info::AccountInfo<'a>,
1273    fee_vault: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1274    fee_vault_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1275    buyer: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1276    buyer_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1277    list_state: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1278    list_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1279    mint: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1280    currency: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1281    owner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1282    owner_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1283    payer: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1284    payer_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1285    taker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1286    taker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1287    maker_broker: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1288    maker_broker_currency_ta: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1289    rent_destination: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1290    token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1291    currency_token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1292    associated_token_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1293    marketplace_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1294    system_program: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1295    cosigner: Option<&'b solana_program::account_info::AccountInfo<'a>>,
1296    max_amount: Option<u64>,
1297    /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
1298    __remaining_accounts: Vec<(
1299        &'b solana_program::account_info::AccountInfo<'a>,
1300        bool,
1301        bool,
1302    )>,
1303}