Skip to main content

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