defituna_client/generated/instructions/
set_tuna_spot_position_limit_orders.rs1use borsh::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const SET_TUNA_SPOT_POSITION_LIMIT_ORDERS_DISCRIMINATOR: [u8; 8] = [10, 180, 19, 205, 169, 133, 52, 118];
12
13#[derive(Debug)]
15pub struct SetTunaSpotPositionLimitOrders {
16
17
18 pub authority: solana_pubkey::Pubkey,
19
20
21 pub tuna_position: solana_pubkey::Pubkey,
22 }
23
24impl SetTunaSpotPositionLimitOrders {
25 pub fn instruction(&self, args: SetTunaSpotPositionLimitOrdersInstructionArgs) -> solana_instruction::Instruction {
26 self.instruction_with_remaining_accounts(args, &[])
27 }
28 #[allow(clippy::arithmetic_side_effects)]
29 #[allow(clippy::vec_init_then_push)]
30 pub fn instruction_with_remaining_accounts(&self, args: SetTunaSpotPositionLimitOrdersInstructionArgs, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
31 let mut accounts = Vec::with_capacity(2+ remaining_accounts.len());
32 accounts.push(solana_instruction::AccountMeta::new_readonly(
33 self.authority,
34 true
35 ));
36 accounts.push(solana_instruction::AccountMeta::new(
37 self.tuna_position,
38 false
39 ));
40 accounts.extend_from_slice(remaining_accounts);
41 let mut data = borsh::to_vec(&SetTunaSpotPositionLimitOrdersInstructionData::new()).unwrap();
42 let mut args = borsh::to_vec(&args).unwrap();
43 data.append(&mut args);
44
45 solana_instruction::Instruction {
46 program_id: crate::TUNA_ID,
47 accounts,
48 data,
49 }
50 }
51}
52
53#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
54#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
55 pub struct SetTunaSpotPositionLimitOrdersInstructionData {
56 discriminator: [u8; 8],
57 }
58
59impl SetTunaSpotPositionLimitOrdersInstructionData {
60 pub fn new() -> Self {
61 Self {
62 discriminator: [10, 180, 19, 205, 169, 133, 52, 118],
63 }
64 }
65}
66
67impl Default for SetTunaSpotPositionLimitOrdersInstructionData {
68 fn default() -> Self {
69 Self::new()
70 }
71}
72
73#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
74#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
75 pub struct SetTunaSpotPositionLimitOrdersInstructionArgs {
76 pub lower_limit_order_sqrt_price: u128,
77 pub upper_limit_order_sqrt_price: u128,
78 }
79
80
81#[derive(Clone, Debug, Default)]
88pub struct SetTunaSpotPositionLimitOrdersBuilder {
89 authority: Option<solana_pubkey::Pubkey>,
90 tuna_position: Option<solana_pubkey::Pubkey>,
91 lower_limit_order_sqrt_price: Option<u128>,
92 upper_limit_order_sqrt_price: Option<u128>,
93 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
94}
95
96impl SetTunaSpotPositionLimitOrdersBuilder {
97 pub fn new() -> Self {
98 Self::default()
99 }
100 #[inline(always)]
101 pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
102 self.authority = Some(authority);
103 self
104 }
105 #[inline(always)]
106 pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
107 self.tuna_position = Some(tuna_position);
108 self
109 }
110 #[inline(always)]
111 pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
112 self.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
113 self
114 }
115 #[inline(always)]
116 pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
117 self.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
118 self
119 }
120 #[inline(always)]
122 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
123 self.__remaining_accounts.push(account);
124 self
125 }
126 #[inline(always)]
128 pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
129 self.__remaining_accounts.extend_from_slice(accounts);
130 self
131 }
132 #[allow(clippy::clone_on_copy)]
133 pub fn instruction(&self) -> solana_instruction::Instruction {
134 let accounts = SetTunaSpotPositionLimitOrders {
135 authority: self.authority.expect("authority is not set"),
136 tuna_position: self.tuna_position.expect("tuna_position is not set"),
137 };
138 let args = SetTunaSpotPositionLimitOrdersInstructionArgs {
139 lower_limit_order_sqrt_price: self.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
140 upper_limit_order_sqrt_price: self.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
141 };
142
143 accounts.instruction_with_remaining_accounts(args, &self.__remaining_accounts)
144 }
145}
146
147 pub struct SetTunaSpotPositionLimitOrdersCpiAccounts<'a, 'b> {
149
150
151 pub authority: &'b solana_account_info::AccountInfo<'a>,
152
153
154 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
155 }
156
157pub struct SetTunaSpotPositionLimitOrdersCpi<'a, 'b> {
159 pub __program: &'b solana_account_info::AccountInfo<'a>,
161
162
163 pub authority: &'b solana_account_info::AccountInfo<'a>,
164
165
166 pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
167 pub __args: SetTunaSpotPositionLimitOrdersInstructionArgs,
169 }
170
171impl<'a, 'b> SetTunaSpotPositionLimitOrdersCpi<'a, 'b> {
172 pub fn new(
173 program: &'b solana_account_info::AccountInfo<'a>,
174 accounts: SetTunaSpotPositionLimitOrdersCpiAccounts<'a, 'b>,
175 args: SetTunaSpotPositionLimitOrdersInstructionArgs,
176 ) -> Self {
177 Self {
178 __program: program,
179 authority: accounts.authority,
180 tuna_position: accounts.tuna_position,
181 __args: args,
182 }
183 }
184 #[inline(always)]
185 pub fn invoke(&self) -> solana_program_error::ProgramResult {
186 self.invoke_signed_with_remaining_accounts(&[], &[])
187 }
188 #[inline(always)]
189 pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
190 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
191 }
192 #[inline(always)]
193 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
194 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
195 }
196 #[allow(clippy::arithmetic_side_effects)]
197 #[allow(clippy::clone_on_copy)]
198 #[allow(clippy::vec_init_then_push)]
199 pub fn invoke_signed_with_remaining_accounts(
200 &self,
201 signers_seeds: &[&[&[u8]]],
202 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
203 ) -> solana_program_error::ProgramResult {
204 let mut accounts = Vec::with_capacity(2+ remaining_accounts.len());
205 accounts.push(solana_instruction::AccountMeta::new_readonly(
206 *self.authority.key,
207 true
208 ));
209 accounts.push(solana_instruction::AccountMeta::new(
210 *self.tuna_position.key,
211 false
212 ));
213 remaining_accounts.iter().for_each(|remaining_account| {
214 accounts.push(solana_instruction::AccountMeta {
215 pubkey: *remaining_account.0.key,
216 is_signer: remaining_account.1,
217 is_writable: remaining_account.2,
218 })
219 });
220 let mut data = borsh::to_vec(&SetTunaSpotPositionLimitOrdersInstructionData::new()).unwrap();
221 let mut args = borsh::to_vec(&self.__args).unwrap();
222 data.append(&mut args);
223
224 let instruction = solana_instruction::Instruction {
225 program_id: crate::TUNA_ID,
226 accounts,
227 data,
228 };
229 let mut account_infos = Vec::with_capacity(3 + remaining_accounts.len());
230 account_infos.push(self.__program.clone());
231 account_infos.push(self.authority.clone());
232 account_infos.push(self.tuna_position.clone());
233 remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
234
235 if signers_seeds.is_empty() {
236 solana_cpi::invoke(&instruction, &account_infos)
237 } else {
238 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
239 }
240 }
241}
242
243#[derive(Clone, Debug)]
250pub struct SetTunaSpotPositionLimitOrdersCpiBuilder<'a, 'b> {
251 instruction: Box<SetTunaSpotPositionLimitOrdersCpiBuilderInstruction<'a, 'b>>,
252}
253
254impl<'a, 'b> SetTunaSpotPositionLimitOrdersCpiBuilder<'a, 'b> {
255 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
256 let instruction = Box::new(SetTunaSpotPositionLimitOrdersCpiBuilderInstruction {
257 __program: program,
258 authority: None,
259 tuna_position: None,
260 lower_limit_order_sqrt_price: None,
261 upper_limit_order_sqrt_price: None,
262 __remaining_accounts: Vec::new(),
263 });
264 Self { instruction }
265 }
266 #[inline(always)]
267 pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
268 self.instruction.authority = Some(authority);
269 self
270 }
271 #[inline(always)]
272 pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
273 self.instruction.tuna_position = Some(tuna_position);
274 self
275 }
276 #[inline(always)]
277 pub fn lower_limit_order_sqrt_price(&mut self, lower_limit_order_sqrt_price: u128) -> &mut Self {
278 self.instruction.lower_limit_order_sqrt_price = Some(lower_limit_order_sqrt_price);
279 self
280 }
281 #[inline(always)]
282 pub fn upper_limit_order_sqrt_price(&mut self, upper_limit_order_sqrt_price: u128) -> &mut Self {
283 self.instruction.upper_limit_order_sqrt_price = Some(upper_limit_order_sqrt_price);
284 self
285 }
286 #[inline(always)]
288 pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
289 self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
290 self
291 }
292 #[inline(always)]
297 pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
298 self.instruction.__remaining_accounts.extend_from_slice(accounts);
299 self
300 }
301 #[inline(always)]
302 pub fn invoke(&self) -> solana_program_error::ProgramResult {
303 self.invoke_signed(&[])
304 }
305 #[allow(clippy::clone_on_copy)]
306 #[allow(clippy::vec_init_then_push)]
307 pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
308 let args = SetTunaSpotPositionLimitOrdersInstructionArgs {
309 lower_limit_order_sqrt_price: self.instruction.lower_limit_order_sqrt_price.clone().expect("lower_limit_order_sqrt_price is not set"),
310 upper_limit_order_sqrt_price: self.instruction.upper_limit_order_sqrt_price.clone().expect("upper_limit_order_sqrt_price is not set"),
311 };
312 let instruction = SetTunaSpotPositionLimitOrdersCpi {
313 __program: self.instruction.__program,
314
315 authority: self.instruction.authority.expect("authority is not set"),
316
317 tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
318 __args: args,
319 };
320 instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
321 }
322}
323
324#[derive(Clone, Debug)]
325struct SetTunaSpotPositionLimitOrdersCpiBuilderInstruction<'a, 'b> {
326 __program: &'b solana_account_info::AccountInfo<'a>,
327 authority: Option<&'b solana_account_info::AccountInfo<'a>>,
328 tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
329 lower_limit_order_sqrt_price: Option<u128>,
330 upper_limit_order_sqrt_price: Option<u128>,
331 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
333}
334