Skip to main content

security_token_client/generated/instructions/
create_distribution_escrow.rs

1//! This code was AUTOGENERATED using the codama library.
2//! Please DO NOT EDIT THIS FILE, instead use visitors
3//! to add features, then rerun codama to update it.
4//!
5//! <https://github.com/codama-idl/codama>
6//!
7
8use crate::generated::types::CreateDistributionEscrowArgs;
9use borsh::BorshDeserialize;
10use borsh::BorshSerialize;
11
12pub const CREATE_DISTRIBUTION_ESCROW_DISCRIMINATOR: u8 = 20;
13
14/// Accounts.
15#[derive(Debug)]
16pub struct CreateDistributionEscrow {
17    pub mint: solana_pubkey::Pubkey,
18
19    pub verification_config_or_mint_authority: solana_pubkey::Pubkey,
20
21    pub instructions_sysvar_or_creator: solana_pubkey::Pubkey,
22
23    pub distribution_escrow_authority: solana_pubkey::Pubkey,
24
25    pub payer: solana_pubkey::Pubkey,
26
27    pub distribution_token_account: solana_pubkey::Pubkey,
28
29    pub distribution_mint: solana_pubkey::Pubkey,
30
31    pub token_program: solana_pubkey::Pubkey,
32
33    pub associated_token_account_program: solana_pubkey::Pubkey,
34
35    pub system_program: solana_pubkey::Pubkey,
36}
37
38impl CreateDistributionEscrow {
39    pub fn instruction(
40        &self,
41        args: CreateDistributionEscrowInstructionArgs,
42    ) -> solana_instruction::Instruction {
43        self.instruction_with_remaining_accounts(args, &[])
44    }
45    #[allow(clippy::arithmetic_side_effects)]
46    #[allow(clippy::vec_init_then_push)]
47    pub fn instruction_with_remaining_accounts(
48        &self,
49        args: CreateDistributionEscrowInstructionArgs,
50        remaining_accounts: &[solana_instruction::AccountMeta],
51    ) -> solana_instruction::Instruction {
52        let mut accounts = Vec::with_capacity(10 + remaining_accounts.len());
53        accounts.push(solana_instruction::AccountMeta::new_readonly(
54            self.mint, false,
55        ));
56        accounts.push(solana_instruction::AccountMeta::new_readonly(
57            self.verification_config_or_mint_authority,
58            false,
59        ));
60        accounts.push(solana_instruction::AccountMeta::new_readonly(
61            self.instructions_sysvar_or_creator,
62            false,
63        ));
64        accounts.push(solana_instruction::AccountMeta::new_readonly(
65            self.distribution_escrow_authority,
66            false,
67        ));
68        accounts.push(solana_instruction::AccountMeta::new(self.payer, true));
69        accounts.push(solana_instruction::AccountMeta::new(
70            self.distribution_token_account,
71            false,
72        ));
73        accounts.push(solana_instruction::AccountMeta::new_readonly(
74            self.distribution_mint,
75            false,
76        ));
77        accounts.push(solana_instruction::AccountMeta::new_readonly(
78            self.token_program,
79            false,
80        ));
81        accounts.push(solana_instruction::AccountMeta::new_readonly(
82            self.associated_token_account_program,
83            false,
84        ));
85        accounts.push(solana_instruction::AccountMeta::new_readonly(
86            self.system_program,
87            false,
88        ));
89        accounts.extend_from_slice(remaining_accounts);
90        let mut data = borsh::to_vec(&CreateDistributionEscrowInstructionData::new()).unwrap();
91        let mut args = borsh::to_vec(&args).unwrap();
92        data.append(&mut args);
93
94        solana_instruction::Instruction {
95            program_id: crate::SECURITY_TOKEN_PROGRAM_ID,
96            accounts,
97            data,
98        }
99    }
100}
101
102#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
103#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
104pub struct CreateDistributionEscrowInstructionData {
105    discriminator: u8,
106}
107
108impl CreateDistributionEscrowInstructionData {
109    pub fn new() -> Self {
110        Self { discriminator: 20 }
111    }
112}
113
114impl Default for CreateDistributionEscrowInstructionData {
115    fn default() -> Self {
116        Self::new()
117    }
118}
119
120#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
121#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
122pub struct CreateDistributionEscrowInstructionArgs {
123    pub create_distribution_escrow_args: CreateDistributionEscrowArgs,
124}
125
126/// Instruction builder for `CreateDistributionEscrow`.
127///
128/// ### Accounts:
129///
130///   0. `[]` mint
131///   1. `[]` verification_config_or_mint_authority
132///   2. `[]` instructions_sysvar_or_creator
133///   3. `[]` distribution_escrow_authority
134///   4. `[writable, signer]` payer
135///   5. `[writable]` distribution_token_account
136///   6. `[]` distribution_mint
137///   7. `[optional]` token_program (default to `TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb`)
138///   8. `[]` associated_token_account_program
139///   9. `[optional]` system_program (default to `11111111111111111111111111111111`)
140#[derive(Clone, Debug, Default)]
141pub struct CreateDistributionEscrowBuilder {
142    mint: Option<solana_pubkey::Pubkey>,
143    verification_config_or_mint_authority: Option<solana_pubkey::Pubkey>,
144    instructions_sysvar_or_creator: Option<solana_pubkey::Pubkey>,
145    distribution_escrow_authority: Option<solana_pubkey::Pubkey>,
146    payer: Option<solana_pubkey::Pubkey>,
147    distribution_token_account: Option<solana_pubkey::Pubkey>,
148    distribution_mint: Option<solana_pubkey::Pubkey>,
149    token_program: Option<solana_pubkey::Pubkey>,
150    associated_token_account_program: Option<solana_pubkey::Pubkey>,
151    system_program: Option<solana_pubkey::Pubkey>,
152    create_distribution_escrow_args: Option<CreateDistributionEscrowArgs>,
153    __remaining_accounts: Vec<solana_instruction::AccountMeta>,
154}
155
156impl CreateDistributionEscrowBuilder {
157    pub fn new() -> Self {
158        Self::default()
159    }
160    #[inline(always)]
161    pub fn mint(&mut self, mint: solana_pubkey::Pubkey) -> &mut Self {
162        self.mint = Some(mint);
163        self
164    }
165    #[inline(always)]
166    pub fn verification_config_or_mint_authority(
167        &mut self,
168        verification_config_or_mint_authority: solana_pubkey::Pubkey,
169    ) -> &mut Self {
170        self.verification_config_or_mint_authority = Some(verification_config_or_mint_authority);
171        self
172    }
173    #[inline(always)]
174    pub fn instructions_sysvar_or_creator(
175        &mut self,
176        instructions_sysvar_or_creator: solana_pubkey::Pubkey,
177    ) -> &mut Self {
178        self.instructions_sysvar_or_creator = Some(instructions_sysvar_or_creator);
179        self
180    }
181    #[inline(always)]
182    pub fn distribution_escrow_authority(
183        &mut self,
184        distribution_escrow_authority: solana_pubkey::Pubkey,
185    ) -> &mut Self {
186        self.distribution_escrow_authority = Some(distribution_escrow_authority);
187        self
188    }
189    #[inline(always)]
190    pub fn payer(&mut self, payer: solana_pubkey::Pubkey) -> &mut Self {
191        self.payer = Some(payer);
192        self
193    }
194    #[inline(always)]
195    pub fn distribution_token_account(
196        &mut self,
197        distribution_token_account: solana_pubkey::Pubkey,
198    ) -> &mut Self {
199        self.distribution_token_account = Some(distribution_token_account);
200        self
201    }
202    #[inline(always)]
203    pub fn distribution_mint(&mut self, distribution_mint: solana_pubkey::Pubkey) -> &mut Self {
204        self.distribution_mint = Some(distribution_mint);
205        self
206    }
207    /// `[optional account, default to 'TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb']`
208    #[inline(always)]
209    pub fn token_program(&mut self, token_program: solana_pubkey::Pubkey) -> &mut Self {
210        self.token_program = Some(token_program);
211        self
212    }
213    #[inline(always)]
214    pub fn associated_token_account_program(
215        &mut self,
216        associated_token_account_program: solana_pubkey::Pubkey,
217    ) -> &mut Self {
218        self.associated_token_account_program = Some(associated_token_account_program);
219        self
220    }
221    /// `[optional account, default to '11111111111111111111111111111111']`
222    #[inline(always)]
223    pub fn system_program(&mut self, system_program: solana_pubkey::Pubkey) -> &mut Self {
224        self.system_program = Some(system_program);
225        self
226    }
227    #[inline(always)]
228    pub fn create_distribution_escrow_args(
229        &mut self,
230        create_distribution_escrow_args: CreateDistributionEscrowArgs,
231    ) -> &mut Self {
232        self.create_distribution_escrow_args = Some(create_distribution_escrow_args);
233        self
234    }
235    /// Add an additional account to the instruction.
236    #[inline(always)]
237    pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
238        self.__remaining_accounts.push(account);
239        self
240    }
241    /// Add additional accounts to the instruction.
242    #[inline(always)]
243    pub fn add_remaining_accounts(
244        &mut self,
245        accounts: &[solana_instruction::AccountMeta],
246    ) -> &mut Self {
247        self.__remaining_accounts.extend_from_slice(accounts);
248        self
249    }
250    #[allow(clippy::clone_on_copy)]
251    pub fn instruction(&self) -> solana_instruction::Instruction {
252        let accounts = CreateDistributionEscrow {
253            mint: self.mint.expect("mint is not set"),
254            verification_config_or_mint_authority: self
255                .verification_config_or_mint_authority
256                .expect("verification_config_or_mint_authority is not set"),
257            instructions_sysvar_or_creator: self
258                .instructions_sysvar_or_creator
259                .expect("instructions_sysvar_or_creator is not set"),
260            distribution_escrow_authority: self
261                .distribution_escrow_authority
262                .expect("distribution_escrow_authority is not set"),
263            payer: self.payer.expect("payer is not set"),
264            distribution_token_account: self
265                .distribution_token_account
266                .expect("distribution_token_account is not set"),
267            distribution_mint: self
268                .distribution_mint
269                .expect("distribution_mint is not set"),
270            token_program: self.token_program.unwrap_or(solana_pubkey::pubkey!(
271                "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
272            )),
273            associated_token_account_program: self
274                .associated_token_account_program
275                .expect("associated_token_account_program is not set"),
276            system_program: self
277                .system_program
278                .unwrap_or(solana_pubkey::pubkey!("11111111111111111111111111111111")),
279        };
280        let args = CreateDistributionEscrowInstructionArgs {
281            create_distribution_escrow_args: self
282                .create_distribution_escrow_args
283                .clone()
284                .expect("create_distribution_escrow_args is not set"),
285        };
286
287        accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
288    }
289}
290
291/// `create_distribution_escrow` CPI accounts.
292pub struct CreateDistributionEscrowCpiAccounts<'a, 'b> {
293    pub mint: &'b solana_account_info::AccountInfo<'a>,
294
295    pub verification_config_or_mint_authority: &'b solana_account_info::AccountInfo<'a>,
296
297    pub instructions_sysvar_or_creator: &'b solana_account_info::AccountInfo<'a>,
298
299    pub distribution_escrow_authority: &'b solana_account_info::AccountInfo<'a>,
300
301    pub payer: &'b solana_account_info::AccountInfo<'a>,
302
303    pub distribution_token_account: &'b solana_account_info::AccountInfo<'a>,
304
305    pub distribution_mint: &'b solana_account_info::AccountInfo<'a>,
306
307    pub token_program: &'b solana_account_info::AccountInfo<'a>,
308
309    pub associated_token_account_program: &'b solana_account_info::AccountInfo<'a>,
310
311    pub system_program: &'b solana_account_info::AccountInfo<'a>,
312}
313
314/// `create_distribution_escrow` CPI instruction.
315pub struct CreateDistributionEscrowCpi<'a, 'b> {
316    /// The program to invoke.
317    pub __program: &'b solana_account_info::AccountInfo<'a>,
318
319    pub mint: &'b solana_account_info::AccountInfo<'a>,
320
321    pub verification_config_or_mint_authority: &'b solana_account_info::AccountInfo<'a>,
322
323    pub instructions_sysvar_or_creator: &'b solana_account_info::AccountInfo<'a>,
324
325    pub distribution_escrow_authority: &'b solana_account_info::AccountInfo<'a>,
326
327    pub payer: &'b solana_account_info::AccountInfo<'a>,
328
329    pub distribution_token_account: &'b solana_account_info::AccountInfo<'a>,
330
331    pub distribution_mint: &'b solana_account_info::AccountInfo<'a>,
332
333    pub token_program: &'b solana_account_info::AccountInfo<'a>,
334
335    pub associated_token_account_program: &'b solana_account_info::AccountInfo<'a>,
336
337    pub system_program: &'b solana_account_info::AccountInfo<'a>,
338    /// The arguments for the instruction.
339    pub __args: CreateDistributionEscrowInstructionArgs,
340}
341
342impl<'a, 'b> CreateDistributionEscrowCpi<'a, 'b> {
343    pub fn new(
344        program: &'b solana_account_info::AccountInfo<'a>,
345        accounts: CreateDistributionEscrowCpiAccounts<'a, 'b>,
346        args: CreateDistributionEscrowInstructionArgs,
347    ) -> Self {
348        Self {
349            __program: program,
350            mint: accounts.mint,
351            verification_config_or_mint_authority: accounts.verification_config_or_mint_authority,
352            instructions_sysvar_or_creator: accounts.instructions_sysvar_or_creator,
353            distribution_escrow_authority: accounts.distribution_escrow_authority,
354            payer: accounts.payer,
355            distribution_token_account: accounts.distribution_token_account,
356            distribution_mint: accounts.distribution_mint,
357            token_program: accounts.token_program,
358            associated_token_account_program: accounts.associated_token_account_program,
359            system_program: accounts.system_program,
360            __args: args,
361        }
362    }
363    #[inline(always)]
364    pub fn invoke(&self) -> solana_program_error::ProgramResult {
365        self.invoke_signed_with_remaining_accounts(&[], &[])
366    }
367    #[inline(always)]
368    pub fn invoke_with_remaining_accounts(
369        &self,
370        remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
371    ) -> solana_program_error::ProgramResult {
372        self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
373    }
374    #[inline(always)]
375    pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
376        self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
377    }
378    #[allow(clippy::arithmetic_side_effects)]
379    #[allow(clippy::clone_on_copy)]
380    #[allow(clippy::vec_init_then_push)]
381    pub fn invoke_signed_with_remaining_accounts(
382        &self,
383        signers_seeds: &[&[&[u8]]],
384        remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
385    ) -> solana_program_error::ProgramResult {
386        let mut accounts = Vec::with_capacity(10 + remaining_accounts.len());
387        accounts.push(solana_instruction::AccountMeta::new_readonly(
388            *self.mint.key,
389            false,
390        ));
391        accounts.push(solana_instruction::AccountMeta::new_readonly(
392            *self.verification_config_or_mint_authority.key,
393            false,
394        ));
395        accounts.push(solana_instruction::AccountMeta::new_readonly(
396            *self.instructions_sysvar_or_creator.key,
397            false,
398        ));
399        accounts.push(solana_instruction::AccountMeta::new_readonly(
400            *self.distribution_escrow_authority.key,
401            false,
402        ));
403        accounts.push(solana_instruction::AccountMeta::new(*self.payer.key, true));
404        accounts.push(solana_instruction::AccountMeta::new(
405            *self.distribution_token_account.key,
406            false,
407        ));
408        accounts.push(solana_instruction::AccountMeta::new_readonly(
409            *self.distribution_mint.key,
410            false,
411        ));
412        accounts.push(solana_instruction::AccountMeta::new_readonly(
413            *self.token_program.key,
414            false,
415        ));
416        accounts.push(solana_instruction::AccountMeta::new_readonly(
417            *self.associated_token_account_program.key,
418            false,
419        ));
420        accounts.push(solana_instruction::AccountMeta::new_readonly(
421            *self.system_program.key,
422            false,
423        ));
424        remaining_accounts.iter().for_each(|remaining_account| {
425            accounts.push(solana_instruction::AccountMeta {
426                pubkey: *remaining_account.0.key,
427                is_signer: remaining_account.1,
428                is_writable: remaining_account.2,
429            })
430        });
431        let mut data = borsh::to_vec(&CreateDistributionEscrowInstructionData::new()).unwrap();
432        let mut args = borsh::to_vec(&self.__args).unwrap();
433        data.append(&mut args);
434
435        let instruction = solana_instruction::Instruction {
436            program_id: crate::SECURITY_TOKEN_PROGRAM_ID,
437            accounts,
438            data,
439        };
440        let mut account_infos = Vec::with_capacity(11 + remaining_accounts.len());
441        account_infos.push(self.__program.clone());
442        account_infos.push(self.mint.clone());
443        account_infos.push(self.verification_config_or_mint_authority.clone());
444        account_infos.push(self.instructions_sysvar_or_creator.clone());
445        account_infos.push(self.distribution_escrow_authority.clone());
446        account_infos.push(self.payer.clone());
447        account_infos.push(self.distribution_token_account.clone());
448        account_infos.push(self.distribution_mint.clone());
449        account_infos.push(self.token_program.clone());
450        account_infos.push(self.associated_token_account_program.clone());
451        account_infos.push(self.system_program.clone());
452        remaining_accounts
453            .iter()
454            .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
455
456        if signers_seeds.is_empty() {
457            solana_cpi::invoke(&instruction, &account_infos)
458        } else {
459            solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
460        }
461    }
462}
463
464/// Instruction builder for `CreateDistributionEscrow` via CPI.
465///
466/// ### Accounts:
467///
468///   0. `[]` mint
469///   1. `[]` verification_config_or_mint_authority
470///   2. `[]` instructions_sysvar_or_creator
471///   3. `[]` distribution_escrow_authority
472///   4. `[writable, signer]` payer
473///   5. `[writable]` distribution_token_account
474///   6. `[]` distribution_mint
475///   7. `[]` token_program
476///   8. `[]` associated_token_account_program
477///   9. `[]` system_program
478#[derive(Clone, Debug)]
479pub struct CreateDistributionEscrowCpiBuilder<'a, 'b> {
480    instruction: Box<CreateDistributionEscrowCpiBuilderInstruction<'a, 'b>>,
481}
482
483impl<'a, 'b> CreateDistributionEscrowCpiBuilder<'a, 'b> {
484    pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
485        let instruction = Box::new(CreateDistributionEscrowCpiBuilderInstruction {
486            __program: program,
487            mint: None,
488            verification_config_or_mint_authority: None,
489            instructions_sysvar_or_creator: None,
490            distribution_escrow_authority: None,
491            payer: None,
492            distribution_token_account: None,
493            distribution_mint: None,
494            token_program: None,
495            associated_token_account_program: None,
496            system_program: None,
497            create_distribution_escrow_args: None,
498            __remaining_accounts: Vec::new(),
499        });
500        Self { instruction }
501    }
502    #[inline(always)]
503    pub fn mint(&mut self, mint: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
504        self.instruction.mint = Some(mint);
505        self
506    }
507    #[inline(always)]
508    pub fn verification_config_or_mint_authority(
509        &mut self,
510        verification_config_or_mint_authority: &'b solana_account_info::AccountInfo<'a>,
511    ) -> &mut Self {
512        self.instruction.verification_config_or_mint_authority =
513            Some(verification_config_or_mint_authority);
514        self
515    }
516    #[inline(always)]
517    pub fn instructions_sysvar_or_creator(
518        &mut self,
519        instructions_sysvar_or_creator: &'b solana_account_info::AccountInfo<'a>,
520    ) -> &mut Self {
521        self.instruction.instructions_sysvar_or_creator = Some(instructions_sysvar_or_creator);
522        self
523    }
524    #[inline(always)]
525    pub fn distribution_escrow_authority(
526        &mut self,
527        distribution_escrow_authority: &'b solana_account_info::AccountInfo<'a>,
528    ) -> &mut Self {
529        self.instruction.distribution_escrow_authority = Some(distribution_escrow_authority);
530        self
531    }
532    #[inline(always)]
533    pub fn payer(&mut self, payer: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
534        self.instruction.payer = Some(payer);
535        self
536    }
537    #[inline(always)]
538    pub fn distribution_token_account(
539        &mut self,
540        distribution_token_account: &'b solana_account_info::AccountInfo<'a>,
541    ) -> &mut Self {
542        self.instruction.distribution_token_account = Some(distribution_token_account);
543        self
544    }
545    #[inline(always)]
546    pub fn distribution_mint(
547        &mut self,
548        distribution_mint: &'b solana_account_info::AccountInfo<'a>,
549    ) -> &mut Self {
550        self.instruction.distribution_mint = Some(distribution_mint);
551        self
552    }
553    #[inline(always)]
554    pub fn token_program(
555        &mut self,
556        token_program: &'b solana_account_info::AccountInfo<'a>,
557    ) -> &mut Self {
558        self.instruction.token_program = Some(token_program);
559        self
560    }
561    #[inline(always)]
562    pub fn associated_token_account_program(
563        &mut self,
564        associated_token_account_program: &'b solana_account_info::AccountInfo<'a>,
565    ) -> &mut Self {
566        self.instruction.associated_token_account_program = Some(associated_token_account_program);
567        self
568    }
569    #[inline(always)]
570    pub fn system_program(
571        &mut self,
572        system_program: &'b solana_account_info::AccountInfo<'a>,
573    ) -> &mut Self {
574        self.instruction.system_program = Some(system_program);
575        self
576    }
577    #[inline(always)]
578    pub fn create_distribution_escrow_args(
579        &mut self,
580        create_distribution_escrow_args: CreateDistributionEscrowArgs,
581    ) -> &mut Self {
582        self.instruction.create_distribution_escrow_args = Some(create_distribution_escrow_args);
583        self
584    }
585    /// Add an additional account to the instruction.
586    #[inline(always)]
587    pub fn add_remaining_account(
588        &mut self,
589        account: &'b solana_account_info::AccountInfo<'a>,
590        is_writable: bool,
591        is_signer: bool,
592    ) -> &mut Self {
593        self.instruction
594            .__remaining_accounts
595            .push((account, is_writable, is_signer));
596        self
597    }
598    /// Add additional accounts to the instruction.
599    ///
600    /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
601    /// and a `bool` indicating whether the account is a signer or not.
602    #[inline(always)]
603    pub fn add_remaining_accounts(
604        &mut self,
605        accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
606    ) -> &mut Self {
607        self.instruction
608            .__remaining_accounts
609            .extend_from_slice(accounts);
610        self
611    }
612    #[inline(always)]
613    pub fn invoke(&self) -> solana_program_error::ProgramResult {
614        self.invoke_signed(&[])
615    }
616    #[allow(clippy::clone_on_copy)]
617    #[allow(clippy::vec_init_then_push)]
618    pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
619        let args = CreateDistributionEscrowInstructionArgs {
620            create_distribution_escrow_args: self
621                .instruction
622                .create_distribution_escrow_args
623                .clone()
624                .expect("create_distribution_escrow_args is not set"),
625        };
626        let instruction = CreateDistributionEscrowCpi {
627            __program: self.instruction.__program,
628
629            mint: self.instruction.mint.expect("mint is not set"),
630
631            verification_config_or_mint_authority: self
632                .instruction
633                .verification_config_or_mint_authority
634                .expect("verification_config_or_mint_authority is not set"),
635
636            instructions_sysvar_or_creator: self
637                .instruction
638                .instructions_sysvar_or_creator
639                .expect("instructions_sysvar_or_creator is not set"),
640
641            distribution_escrow_authority: self
642                .instruction
643                .distribution_escrow_authority
644                .expect("distribution_escrow_authority is not set"),
645
646            payer: self.instruction.payer.expect("payer is not set"),
647
648            distribution_token_account: self
649                .instruction
650                .distribution_token_account
651                .expect("distribution_token_account is not set"),
652
653            distribution_mint: self
654                .instruction
655                .distribution_mint
656                .expect("distribution_mint is not set"),
657
658            token_program: self
659                .instruction
660                .token_program
661                .expect("token_program is not set"),
662
663            associated_token_account_program: self
664                .instruction
665                .associated_token_account_program
666                .expect("associated_token_account_program is not set"),
667
668            system_program: self
669                .instruction
670                .system_program
671                .expect("system_program is not set"),
672            __args: args,
673        };
674        instruction.invoke_signed_with_remaining_accounts(
675            signers_seeds,
676            &self.instruction.__remaining_accounts,
677        )
678    }
679}
680
681#[derive(Clone, Debug)]
682struct CreateDistributionEscrowCpiBuilderInstruction<'a, 'b> {
683    __program: &'b solana_account_info::AccountInfo<'a>,
684    mint: Option<&'b solana_account_info::AccountInfo<'a>>,
685    verification_config_or_mint_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
686    instructions_sysvar_or_creator: Option<&'b solana_account_info::AccountInfo<'a>>,
687    distribution_escrow_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
688    payer: Option<&'b solana_account_info::AccountInfo<'a>>,
689    distribution_token_account: Option<&'b solana_account_info::AccountInfo<'a>>,
690    distribution_mint: Option<&'b solana_account_info::AccountInfo<'a>>,
691    token_program: Option<&'b solana_account_info::AccountInfo<'a>>,
692    associated_token_account_program: Option<&'b solana_account_info::AccountInfo<'a>>,
693    system_program: Option<&'b solana_account_info::AccountInfo<'a>>,
694    create_distribution_escrow_args: Option<CreateDistributionEscrowArgs>,
695    /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
696    __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
697}