defituna_client/generated/instructions/
close_tuna_spot_position.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::BorshSerialize;
9use borsh::BorshDeserialize;
10
11pub const CLOSE_TUNA_SPOT_POSITION_DISCRIMINATOR: [u8; 8] = [4, 189, 171, 84, 110, 220, 10, 8];
12
13/// Accounts.
14#[derive(Debug)]
15pub struct CloseTunaSpotPosition {
16            /// 
17/// TUNA accounts
18/// 
19
20    
21              
22          pub authority: solana_pubkey::Pubkey,
23          
24              
25          pub mint_a: solana_pubkey::Pubkey,
26          
27              
28          pub mint_b: solana_pubkey::Pubkey,
29          
30              
31          pub token_program_a: solana_pubkey::Pubkey,
32          
33              
34          pub token_program_b: solana_pubkey::Pubkey,
35          
36              
37          pub tuna_position: solana_pubkey::Pubkey,
38          
39              
40          pub tuna_position_ata_a: solana_pubkey::Pubkey,
41          
42              
43          pub tuna_position_ata_b: solana_pubkey::Pubkey,
44      }
45
46impl CloseTunaSpotPosition {
47  pub fn instruction(&self) -> solana_instruction::Instruction {
48    self.instruction_with_remaining_accounts(&[])
49  }
50  #[allow(clippy::arithmetic_side_effects)]
51  #[allow(clippy::vec_init_then_push)]
52  pub fn instruction_with_remaining_accounts(&self, remaining_accounts: &[solana_instruction::AccountMeta]) -> solana_instruction::Instruction {
53    let mut accounts = Vec::with_capacity(8+ remaining_accounts.len());
54                            accounts.push(solana_instruction::AccountMeta::new(
55            self.authority,
56            true
57          ));
58                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
59            self.mint_a,
60            false
61          ));
62                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
63            self.mint_b,
64            false
65          ));
66                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
67            self.token_program_a,
68            false
69          ));
70                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
71            self.token_program_b,
72            false
73          ));
74                                          accounts.push(solana_instruction::AccountMeta::new(
75            self.tuna_position,
76            false
77          ));
78                                          accounts.push(solana_instruction::AccountMeta::new(
79            self.tuna_position_ata_a,
80            false
81          ));
82                                          accounts.push(solana_instruction::AccountMeta::new(
83            self.tuna_position_ata_b,
84            false
85          ));
86                      accounts.extend_from_slice(remaining_accounts);
87    let data = borsh::to_vec(&CloseTunaSpotPositionInstructionData::new()).unwrap();
88    
89    solana_instruction::Instruction {
90      program_id: crate::TUNA_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))]
99 pub struct CloseTunaSpotPositionInstructionData {
100            discriminator: [u8; 8],
101      }
102
103impl CloseTunaSpotPositionInstructionData {
104  pub fn new() -> Self {
105    Self {
106                        discriminator: [4, 189, 171, 84, 110, 220, 10, 8],
107                  }
108  }
109}
110
111impl Default for CloseTunaSpotPositionInstructionData {
112  fn default() -> Self {
113    Self::new()
114  }
115}
116
117
118
119/// Instruction builder for `CloseTunaSpotPosition`.
120///
121/// ### Accounts:
122///
123                      ///   0. `[writable, signer]` authority
124          ///   1. `[]` mint_a
125          ///   2. `[]` mint_b
126          ///   3. `[]` token_program_a
127          ///   4. `[]` token_program_b
128                ///   5. `[writable]` tuna_position
129                ///   6. `[writable]` tuna_position_ata_a
130                ///   7. `[writable]` tuna_position_ata_b
131#[derive(Clone, Debug, Default)]
132pub struct CloseTunaSpotPositionBuilder {
133            authority: Option<solana_pubkey::Pubkey>,
134                mint_a: Option<solana_pubkey::Pubkey>,
135                mint_b: Option<solana_pubkey::Pubkey>,
136                token_program_a: Option<solana_pubkey::Pubkey>,
137                token_program_b: Option<solana_pubkey::Pubkey>,
138                tuna_position: Option<solana_pubkey::Pubkey>,
139                tuna_position_ata_a: Option<solana_pubkey::Pubkey>,
140                tuna_position_ata_b: Option<solana_pubkey::Pubkey>,
141                __remaining_accounts: Vec<solana_instruction::AccountMeta>,
142}
143
144impl CloseTunaSpotPositionBuilder {
145  pub fn new() -> Self {
146    Self::default()
147  }
148            /// 
149/// TUNA accounts
150/// 
151#[inline(always)]
152    pub fn authority(&mut self, authority: solana_pubkey::Pubkey) -> &mut Self {
153                        self.authority = Some(authority);
154                    self
155    }
156            #[inline(always)]
157    pub fn mint_a(&mut self, mint_a: solana_pubkey::Pubkey) -> &mut Self {
158                        self.mint_a = Some(mint_a);
159                    self
160    }
161            #[inline(always)]
162    pub fn mint_b(&mut self, mint_b: solana_pubkey::Pubkey) -> &mut Self {
163                        self.mint_b = Some(mint_b);
164                    self
165    }
166            #[inline(always)]
167    pub fn token_program_a(&mut self, token_program_a: solana_pubkey::Pubkey) -> &mut Self {
168                        self.token_program_a = Some(token_program_a);
169                    self
170    }
171            #[inline(always)]
172    pub fn token_program_b(&mut self, token_program_b: solana_pubkey::Pubkey) -> &mut Self {
173                        self.token_program_b = Some(token_program_b);
174                    self
175    }
176            #[inline(always)]
177    pub fn tuna_position(&mut self, tuna_position: solana_pubkey::Pubkey) -> &mut Self {
178                        self.tuna_position = Some(tuna_position);
179                    self
180    }
181            #[inline(always)]
182    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: solana_pubkey::Pubkey) -> &mut Self {
183                        self.tuna_position_ata_a = Some(tuna_position_ata_a);
184                    self
185    }
186            #[inline(always)]
187    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: solana_pubkey::Pubkey) -> &mut Self {
188                        self.tuna_position_ata_b = Some(tuna_position_ata_b);
189                    self
190    }
191            /// Add an additional account to the instruction.
192  #[inline(always)]
193  pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
194    self.__remaining_accounts.push(account);
195    self
196  }
197  /// Add additional accounts to the instruction.
198  #[inline(always)]
199  pub fn add_remaining_accounts(&mut self, accounts: &[solana_instruction::AccountMeta]) -> &mut Self {
200    self.__remaining_accounts.extend_from_slice(accounts);
201    self
202  }
203  #[allow(clippy::clone_on_copy)]
204  pub fn instruction(&self) -> solana_instruction::Instruction {
205    let accounts = CloseTunaSpotPosition {
206                              authority: self.authority.expect("authority is not set"),
207                                        mint_a: self.mint_a.expect("mint_a is not set"),
208                                        mint_b: self.mint_b.expect("mint_b is not set"),
209                                        token_program_a: self.token_program_a.expect("token_program_a is not set"),
210                                        token_program_b: self.token_program_b.expect("token_program_b is not set"),
211                                        tuna_position: self.tuna_position.expect("tuna_position is not set"),
212                                        tuna_position_ata_a: self.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
213                                        tuna_position_ata_b: self.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
214                      };
215    
216    accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
217  }
218}
219
220  /// `close_tuna_spot_position` CPI accounts.
221  pub struct CloseTunaSpotPositionCpiAccounts<'a, 'b> {
222                  /// 
223/// TUNA accounts
224/// 
225
226      
227                    
228              pub authority: &'b solana_account_info::AccountInfo<'a>,
229                
230                    
231              pub mint_a: &'b solana_account_info::AccountInfo<'a>,
232                
233                    
234              pub mint_b: &'b solana_account_info::AccountInfo<'a>,
235                
236                    
237              pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
238                
239                    
240              pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
241                
242                    
243              pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
244                
245                    
246              pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
247                
248                    
249              pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
250            }
251
252/// `close_tuna_spot_position` CPI instruction.
253pub struct CloseTunaSpotPositionCpi<'a, 'b> {
254  /// The program to invoke.
255  pub __program: &'b solana_account_info::AccountInfo<'a>,
256            /// 
257/// TUNA accounts
258/// 
259
260    
261              
262          pub authority: &'b solana_account_info::AccountInfo<'a>,
263          
264              
265          pub mint_a: &'b solana_account_info::AccountInfo<'a>,
266          
267              
268          pub mint_b: &'b solana_account_info::AccountInfo<'a>,
269          
270              
271          pub token_program_a: &'b solana_account_info::AccountInfo<'a>,
272          
273              
274          pub token_program_b: &'b solana_account_info::AccountInfo<'a>,
275          
276              
277          pub tuna_position: &'b solana_account_info::AccountInfo<'a>,
278          
279              
280          pub tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>,
281          
282              
283          pub tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>,
284        }
285
286impl<'a, 'b> CloseTunaSpotPositionCpi<'a, 'b> {
287  pub fn new(
288    program: &'b solana_account_info::AccountInfo<'a>,
289          accounts: CloseTunaSpotPositionCpiAccounts<'a, 'b>,
290          ) -> Self {
291    Self {
292      __program: program,
293              authority: accounts.authority,
294              mint_a: accounts.mint_a,
295              mint_b: accounts.mint_b,
296              token_program_a: accounts.token_program_a,
297              token_program_b: accounts.token_program_b,
298              tuna_position: accounts.tuna_position,
299              tuna_position_ata_a: accounts.tuna_position_ata_a,
300              tuna_position_ata_b: accounts.tuna_position_ata_b,
301                }
302  }
303  #[inline(always)]
304  pub fn invoke(&self) -> solana_program_error::ProgramResult {
305    self.invoke_signed_with_remaining_accounts(&[], &[])
306  }
307  #[inline(always)]
308  pub fn invoke_with_remaining_accounts(&self, remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> solana_program_error::ProgramResult {
309    self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
310  }
311  #[inline(always)]
312  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
313    self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
314  }
315  #[allow(clippy::arithmetic_side_effects)]
316  #[allow(clippy::clone_on_copy)]
317  #[allow(clippy::vec_init_then_push)]
318  pub fn invoke_signed_with_remaining_accounts(
319    &self,
320    signers_seeds: &[&[&[u8]]],
321    remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]
322  ) -> solana_program_error::ProgramResult {
323    let mut accounts = Vec::with_capacity(8+ remaining_accounts.len());
324                            accounts.push(solana_instruction::AccountMeta::new(
325            *self.authority.key,
326            true
327          ));
328                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
329            *self.mint_a.key,
330            false
331          ));
332                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
333            *self.mint_b.key,
334            false
335          ));
336                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
337            *self.token_program_a.key,
338            false
339          ));
340                                          accounts.push(solana_instruction::AccountMeta::new_readonly(
341            *self.token_program_b.key,
342            false
343          ));
344                                          accounts.push(solana_instruction::AccountMeta::new(
345            *self.tuna_position.key,
346            false
347          ));
348                                          accounts.push(solana_instruction::AccountMeta::new(
349            *self.tuna_position_ata_a.key,
350            false
351          ));
352                                          accounts.push(solana_instruction::AccountMeta::new(
353            *self.tuna_position_ata_b.key,
354            false
355          ));
356                      remaining_accounts.iter().for_each(|remaining_account| {
357      accounts.push(solana_instruction::AccountMeta {
358          pubkey: *remaining_account.0.key,
359          is_signer: remaining_account.1,
360          is_writable: remaining_account.2,
361      })
362    });
363    let data = borsh::to_vec(&CloseTunaSpotPositionInstructionData::new()).unwrap();
364    
365    let instruction = solana_instruction::Instruction {
366      program_id: crate::TUNA_ID,
367      accounts,
368      data,
369    };
370    let mut account_infos = Vec::with_capacity(9 + remaining_accounts.len());
371    account_infos.push(self.__program.clone());
372                  account_infos.push(self.authority.clone());
373                        account_infos.push(self.mint_a.clone());
374                        account_infos.push(self.mint_b.clone());
375                        account_infos.push(self.token_program_a.clone());
376                        account_infos.push(self.token_program_b.clone());
377                        account_infos.push(self.tuna_position.clone());
378                        account_infos.push(self.tuna_position_ata_a.clone());
379                        account_infos.push(self.tuna_position_ata_b.clone());
380              remaining_accounts.iter().for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
381
382    if signers_seeds.is_empty() {
383      solana_cpi::invoke(&instruction, &account_infos)
384    } else {
385      solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
386    }
387  }
388}
389
390/// Instruction builder for `CloseTunaSpotPosition` via CPI.
391///
392/// ### Accounts:
393///
394                      ///   0. `[writable, signer]` authority
395          ///   1. `[]` mint_a
396          ///   2. `[]` mint_b
397          ///   3. `[]` token_program_a
398          ///   4. `[]` token_program_b
399                ///   5. `[writable]` tuna_position
400                ///   6. `[writable]` tuna_position_ata_a
401                ///   7. `[writable]` tuna_position_ata_b
402#[derive(Clone, Debug)]
403pub struct CloseTunaSpotPositionCpiBuilder<'a, 'b> {
404  instruction: Box<CloseTunaSpotPositionCpiBuilderInstruction<'a, 'b>>,
405}
406
407impl<'a, 'b> CloseTunaSpotPositionCpiBuilder<'a, 'b> {
408  pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
409    let instruction = Box::new(CloseTunaSpotPositionCpiBuilderInstruction {
410      __program: program,
411              authority: None,
412              mint_a: None,
413              mint_b: None,
414              token_program_a: None,
415              token_program_b: None,
416              tuna_position: None,
417              tuna_position_ata_a: None,
418              tuna_position_ata_b: None,
419                                __remaining_accounts: Vec::new(),
420    });
421    Self { instruction }
422  }
423      /// 
424/// TUNA accounts
425/// 
426#[inline(always)]
427    pub fn authority(&mut self, authority: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
428                        self.instruction.authority = Some(authority);
429                    self
430    }
431      #[inline(always)]
432    pub fn mint_a(&mut self, mint_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
433                        self.instruction.mint_a = Some(mint_a);
434                    self
435    }
436      #[inline(always)]
437    pub fn mint_b(&mut self, mint_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
438                        self.instruction.mint_b = Some(mint_b);
439                    self
440    }
441      #[inline(always)]
442    pub fn token_program_a(&mut self, token_program_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
443                        self.instruction.token_program_a = Some(token_program_a);
444                    self
445    }
446      #[inline(always)]
447    pub fn token_program_b(&mut self, token_program_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
448                        self.instruction.token_program_b = Some(token_program_b);
449                    self
450    }
451      #[inline(always)]
452    pub fn tuna_position(&mut self, tuna_position: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
453                        self.instruction.tuna_position = Some(tuna_position);
454                    self
455    }
456      #[inline(always)]
457    pub fn tuna_position_ata_a(&mut self, tuna_position_ata_a: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
458                        self.instruction.tuna_position_ata_a = Some(tuna_position_ata_a);
459                    self
460    }
461      #[inline(always)]
462    pub fn tuna_position_ata_b(&mut self, tuna_position_ata_b: &'b solana_account_info::AccountInfo<'a>) -> &mut Self {
463                        self.instruction.tuna_position_ata_b = Some(tuna_position_ata_b);
464                    self
465    }
466            /// Add an additional account to the instruction.
467  #[inline(always)]
468  pub fn add_remaining_account(&mut self, account: &'b solana_account_info::AccountInfo<'a>, is_writable: bool, is_signer: bool) -> &mut Self {
469    self.instruction.__remaining_accounts.push((account, is_writable, is_signer));
470    self
471  }
472  /// Add additional accounts to the instruction.
473  ///
474  /// Each account is represented by a tuple of the `AccountInfo`, a `bool` indicating whether the account is writable or not,
475  /// and a `bool` indicating whether the account is a signer or not.
476  #[inline(always)]
477  pub fn add_remaining_accounts(&mut self, accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)]) -> &mut Self {
478    self.instruction.__remaining_accounts.extend_from_slice(accounts);
479    self
480  }
481  #[inline(always)]
482  pub fn invoke(&self) -> solana_program_error::ProgramResult {
483    self.invoke_signed(&[])
484  }
485  #[allow(clippy::clone_on_copy)]
486  #[allow(clippy::vec_init_then_push)]
487  pub fn invoke_signed(&self, signers_seeds: &[&[&[u8]]]) -> solana_program_error::ProgramResult {
488        let instruction = CloseTunaSpotPositionCpi {
489        __program: self.instruction.__program,
490                  
491          authority: self.instruction.authority.expect("authority is not set"),
492                  
493          mint_a: self.instruction.mint_a.expect("mint_a is not set"),
494                  
495          mint_b: self.instruction.mint_b.expect("mint_b is not set"),
496                  
497          token_program_a: self.instruction.token_program_a.expect("token_program_a is not set"),
498                  
499          token_program_b: self.instruction.token_program_b.expect("token_program_b is not set"),
500                  
501          tuna_position: self.instruction.tuna_position.expect("tuna_position is not set"),
502                  
503          tuna_position_ata_a: self.instruction.tuna_position_ata_a.expect("tuna_position_ata_a is not set"),
504                  
505          tuna_position_ata_b: self.instruction.tuna_position_ata_b.expect("tuna_position_ata_b is not set"),
506                    };
507    instruction.invoke_signed_with_remaining_accounts(signers_seeds, &self.instruction.__remaining_accounts)
508  }
509}
510
511#[derive(Clone, Debug)]
512struct CloseTunaSpotPositionCpiBuilderInstruction<'a, 'b> {
513  __program: &'b solana_account_info::AccountInfo<'a>,
514            authority: Option<&'b solana_account_info::AccountInfo<'a>>,
515                mint_a: Option<&'b solana_account_info::AccountInfo<'a>>,
516                mint_b: Option<&'b solana_account_info::AccountInfo<'a>>,
517                token_program_a: Option<&'b solana_account_info::AccountInfo<'a>>,
518                token_program_b: Option<&'b solana_account_info::AccountInfo<'a>>,
519                tuna_position: Option<&'b solana_account_info::AccountInfo<'a>>,
520                tuna_position_ata_a: Option<&'b solana_account_info::AccountInfo<'a>>,
521                tuna_position_ata_b: Option<&'b solana_account_info::AccountInfo<'a>>,
522                /// Additional instruction accounts `(AccountInfo, is_writable, is_signer)`.
523  __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
524}
525