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