Skip to main content

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