1use borsh::BorshDeserialize;
9use borsh::BorshSerialize;
10
11#[derive(Debug)]
13pub struct SetInitializePoolAuthority {
14 pub whirlpools_config: solana_pubkey::Pubkey,
15
16 pub adaptive_fee_tier: solana_pubkey::Pubkey,
17
18 pub fee_authority: solana_pubkey::Pubkey,
19
20 pub new_initialize_pool_authority: solana_pubkey::Pubkey,
21}
22
23impl SetInitializePoolAuthority {
24 pub fn instruction(&self) -> solana_instruction::Instruction {
25 self.instruction_with_remaining_accounts(&[])
26 }
27 #[allow(clippy::arithmetic_side_effects)]
28 #[allow(clippy::vec_init_then_push)]
29 pub fn instruction_with_remaining_accounts(
30 &self,
31 remaining_accounts: &[solana_instruction::AccountMeta],
32 ) -> solana_instruction::Instruction {
33 let mut accounts = Vec::with_capacity(4 + remaining_accounts.len());
34 accounts.push(solana_instruction::AccountMeta::new_readonly(
35 self.whirlpools_config,
36 false,
37 ));
38 accounts.push(solana_instruction::AccountMeta::new(
39 self.adaptive_fee_tier,
40 false,
41 ));
42 accounts.push(solana_instruction::AccountMeta::new_readonly(
43 self.fee_authority,
44 true,
45 ));
46 accounts.push(solana_instruction::AccountMeta::new_readonly(
47 self.new_initialize_pool_authority,
48 false,
49 ));
50 accounts.extend_from_slice(remaining_accounts);
51 let data = borsh::to_vec(&SetInitializePoolAuthorityInstructionData::new()).unwrap();
52
53 solana_instruction::Instruction {
54 program_id: crate::WHIRLPOOL_ID,
55 accounts,
56 data,
57 }
58 }
59}
60
61#[derive(BorshSerialize, BorshDeserialize, Clone, Debug, Eq, PartialEq)]
62#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
63pub struct SetInitializePoolAuthorityInstructionData {
64 discriminator: [u8; 8],
65}
66
67impl SetInitializePoolAuthorityInstructionData {
68 pub fn new() -> Self {
69 Self {
70 discriminator: [125, 43, 127, 235, 149, 26, 106, 236],
71 }
72 }
73}
74
75impl Default for SetInitializePoolAuthorityInstructionData {
76 fn default() -> Self {
77 Self::new()
78 }
79}
80
81#[derive(Clone, Debug, Default)]
90pub struct SetInitializePoolAuthorityBuilder {
91 whirlpools_config: Option<solana_pubkey::Pubkey>,
92 adaptive_fee_tier: Option<solana_pubkey::Pubkey>,
93 fee_authority: Option<solana_pubkey::Pubkey>,
94 new_initialize_pool_authority: Option<solana_pubkey::Pubkey>,
95 __remaining_accounts: Vec<solana_instruction::AccountMeta>,
96}
97
98impl SetInitializePoolAuthorityBuilder {
99 pub fn new() -> Self {
100 Self::default()
101 }
102 #[inline(always)]
103 pub fn whirlpools_config(&mut self, whirlpools_config: solana_pubkey::Pubkey) -> &mut Self {
104 self.whirlpools_config = Some(whirlpools_config);
105 self
106 }
107 #[inline(always)]
108 pub fn adaptive_fee_tier(&mut self, adaptive_fee_tier: solana_pubkey::Pubkey) -> &mut Self {
109 self.adaptive_fee_tier = Some(adaptive_fee_tier);
110 self
111 }
112 #[inline(always)]
113 pub fn fee_authority(&mut self, fee_authority: solana_pubkey::Pubkey) -> &mut Self {
114 self.fee_authority = Some(fee_authority);
115 self
116 }
117 #[inline(always)]
118 pub fn new_initialize_pool_authority(
119 &mut self,
120 new_initialize_pool_authority: solana_pubkey::Pubkey,
121 ) -> &mut Self {
122 self.new_initialize_pool_authority = Some(new_initialize_pool_authority);
123 self
124 }
125 #[inline(always)]
127 pub fn add_remaining_account(&mut self, account: solana_instruction::AccountMeta) -> &mut Self {
128 self.__remaining_accounts.push(account);
129 self
130 }
131 #[inline(always)]
133 pub fn add_remaining_accounts(
134 &mut self,
135 accounts: &[solana_instruction::AccountMeta],
136 ) -> &mut Self {
137 self.__remaining_accounts.extend_from_slice(accounts);
138 self
139 }
140 #[allow(clippy::clone_on_copy)]
141 pub fn instruction(&self) -> solana_instruction::Instruction {
142 let accounts = SetInitializePoolAuthority {
143 whirlpools_config: self
144 .whirlpools_config
145 .expect("whirlpools_config is not set"),
146 adaptive_fee_tier: self
147 .adaptive_fee_tier
148 .expect("adaptive_fee_tier is not set"),
149 fee_authority: self.fee_authority.expect("fee_authority is not set"),
150 new_initialize_pool_authority: self
151 .new_initialize_pool_authority
152 .expect("new_initialize_pool_authority is not set"),
153 };
154
155 accounts.instruction_with_remaining_accounts(&self.__remaining_accounts)
156 }
157}
158
159pub struct SetInitializePoolAuthorityCpiAccounts<'a, 'b> {
161 pub whirlpools_config: &'b solana_account_info::AccountInfo<'a>,
162
163 pub adaptive_fee_tier: &'b solana_account_info::AccountInfo<'a>,
164
165 pub fee_authority: &'b solana_account_info::AccountInfo<'a>,
166
167 pub new_initialize_pool_authority: &'b solana_account_info::AccountInfo<'a>,
168}
169
170pub struct SetInitializePoolAuthorityCpi<'a, 'b> {
172 pub __program: &'b solana_account_info::AccountInfo<'a>,
174
175 pub whirlpools_config: &'b solana_account_info::AccountInfo<'a>,
176
177 pub adaptive_fee_tier: &'b solana_account_info::AccountInfo<'a>,
178
179 pub fee_authority: &'b solana_account_info::AccountInfo<'a>,
180
181 pub new_initialize_pool_authority: &'b solana_account_info::AccountInfo<'a>,
182}
183
184impl<'a, 'b> SetInitializePoolAuthorityCpi<'a, 'b> {
185 pub fn new(
186 program: &'b solana_account_info::AccountInfo<'a>,
187 accounts: SetInitializePoolAuthorityCpiAccounts<'a, 'b>,
188 ) -> Self {
189 Self {
190 __program: program,
191 whirlpools_config: accounts.whirlpools_config,
192 adaptive_fee_tier: accounts.adaptive_fee_tier,
193 fee_authority: accounts.fee_authority,
194 new_initialize_pool_authority: accounts.new_initialize_pool_authority,
195 }
196 }
197 #[inline(always)]
198 pub fn invoke(&self) -> solana_program_entrypoint::ProgramResult {
199 self.invoke_signed_with_remaining_accounts(&[], &[])
200 }
201 #[inline(always)]
202 pub fn invoke_with_remaining_accounts(
203 &self,
204 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
205 ) -> solana_program_entrypoint::ProgramResult {
206 self.invoke_signed_with_remaining_accounts(&[], remaining_accounts)
207 }
208 #[inline(always)]
209 pub fn invoke_signed(
210 &self,
211 signers_seeds: &[&[&[u8]]],
212 ) -> solana_program_entrypoint::ProgramResult {
213 self.invoke_signed_with_remaining_accounts(signers_seeds, &[])
214 }
215 #[allow(clippy::arithmetic_side_effects)]
216 #[allow(clippy::clone_on_copy)]
217 #[allow(clippy::vec_init_then_push)]
218 pub fn invoke_signed_with_remaining_accounts(
219 &self,
220 signers_seeds: &[&[&[u8]]],
221 remaining_accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
222 ) -> solana_program_entrypoint::ProgramResult {
223 let mut accounts = Vec::with_capacity(4 + remaining_accounts.len());
224 accounts.push(solana_instruction::AccountMeta::new_readonly(
225 *self.whirlpools_config.key,
226 false,
227 ));
228 accounts.push(solana_instruction::AccountMeta::new(
229 *self.adaptive_fee_tier.key,
230 false,
231 ));
232 accounts.push(solana_instruction::AccountMeta::new_readonly(
233 *self.fee_authority.key,
234 true,
235 ));
236 accounts.push(solana_instruction::AccountMeta::new_readonly(
237 *self.new_initialize_pool_authority.key,
238 false,
239 ));
240 remaining_accounts.iter().for_each(|remaining_account| {
241 accounts.push(solana_instruction::AccountMeta {
242 pubkey: *remaining_account.0.key,
243 is_signer: remaining_account.1,
244 is_writable: remaining_account.2,
245 })
246 });
247 let data = borsh::to_vec(&SetInitializePoolAuthorityInstructionData::new()).unwrap();
248
249 let instruction = solana_instruction::Instruction {
250 program_id: crate::WHIRLPOOL_ID,
251 accounts,
252 data,
253 };
254 let mut account_infos = Vec::with_capacity(5 + remaining_accounts.len());
255 account_infos.push(self.__program.clone());
256 account_infos.push(self.whirlpools_config.clone());
257 account_infos.push(self.adaptive_fee_tier.clone());
258 account_infos.push(self.fee_authority.clone());
259 account_infos.push(self.new_initialize_pool_authority.clone());
260 remaining_accounts
261 .iter()
262 .for_each(|remaining_account| account_infos.push(remaining_account.0.clone()));
263
264 if signers_seeds.is_empty() {
265 solana_cpi::invoke(&instruction, &account_infos)
266 } else {
267 solana_cpi::invoke_signed(&instruction, &account_infos, signers_seeds)
268 }
269 }
270}
271
272#[derive(Clone, Debug)]
281pub struct SetInitializePoolAuthorityCpiBuilder<'a, 'b> {
282 instruction: Box<SetInitializePoolAuthorityCpiBuilderInstruction<'a, 'b>>,
283}
284
285impl<'a, 'b> SetInitializePoolAuthorityCpiBuilder<'a, 'b> {
286 pub fn new(program: &'b solana_account_info::AccountInfo<'a>) -> Self {
287 let instruction = Box::new(SetInitializePoolAuthorityCpiBuilderInstruction {
288 __program: program,
289 whirlpools_config: None,
290 adaptive_fee_tier: None,
291 fee_authority: None,
292 new_initialize_pool_authority: None,
293 __remaining_accounts: Vec::new(),
294 });
295 Self { instruction }
296 }
297 #[inline(always)]
298 pub fn whirlpools_config(
299 &mut self,
300 whirlpools_config: &'b solana_account_info::AccountInfo<'a>,
301 ) -> &mut Self {
302 self.instruction.whirlpools_config = Some(whirlpools_config);
303 self
304 }
305 #[inline(always)]
306 pub fn adaptive_fee_tier(
307 &mut self,
308 adaptive_fee_tier: &'b solana_account_info::AccountInfo<'a>,
309 ) -> &mut Self {
310 self.instruction.adaptive_fee_tier = Some(adaptive_fee_tier);
311 self
312 }
313 #[inline(always)]
314 pub fn fee_authority(
315 &mut self,
316 fee_authority: &'b solana_account_info::AccountInfo<'a>,
317 ) -> &mut Self {
318 self.instruction.fee_authority = Some(fee_authority);
319 self
320 }
321 #[inline(always)]
322 pub fn new_initialize_pool_authority(
323 &mut self,
324 new_initialize_pool_authority: &'b solana_account_info::AccountInfo<'a>,
325 ) -> &mut Self {
326 self.instruction.new_initialize_pool_authority = Some(new_initialize_pool_authority);
327 self
328 }
329 #[inline(always)]
331 pub fn add_remaining_account(
332 &mut self,
333 account: &'b solana_account_info::AccountInfo<'a>,
334 is_writable: bool,
335 is_signer: bool,
336 ) -> &mut Self {
337 self.instruction
338 .__remaining_accounts
339 .push((account, is_writable, is_signer));
340 self
341 }
342 #[inline(always)]
347 pub fn add_remaining_accounts(
348 &mut self,
349 accounts: &[(&'b solana_account_info::AccountInfo<'a>, bool, bool)],
350 ) -> &mut Self {
351 self.instruction
352 .__remaining_accounts
353 .extend_from_slice(accounts);
354 self
355 }
356 #[inline(always)]
357 pub fn invoke(&self) -> solana_program_entrypoint::ProgramResult {
358 self.invoke_signed(&[])
359 }
360 #[allow(clippy::clone_on_copy)]
361 #[allow(clippy::vec_init_then_push)]
362 pub fn invoke_signed(
363 &self,
364 signers_seeds: &[&[&[u8]]],
365 ) -> solana_program_entrypoint::ProgramResult {
366 let instruction = SetInitializePoolAuthorityCpi {
367 __program: self.instruction.__program,
368
369 whirlpools_config: self
370 .instruction
371 .whirlpools_config
372 .expect("whirlpools_config is not set"),
373
374 adaptive_fee_tier: self
375 .instruction
376 .adaptive_fee_tier
377 .expect("adaptive_fee_tier is not set"),
378
379 fee_authority: self
380 .instruction
381 .fee_authority
382 .expect("fee_authority is not set"),
383
384 new_initialize_pool_authority: self
385 .instruction
386 .new_initialize_pool_authority
387 .expect("new_initialize_pool_authority is not set"),
388 };
389 instruction.invoke_signed_with_remaining_accounts(
390 signers_seeds,
391 &self.instruction.__remaining_accounts,
392 )
393 }
394}
395
396#[derive(Clone, Debug)]
397struct SetInitializePoolAuthorityCpiBuilderInstruction<'a, 'b> {
398 __program: &'b solana_account_info::AccountInfo<'a>,
399 whirlpools_config: Option<&'b solana_account_info::AccountInfo<'a>>,
400 adaptive_fee_tier: Option<&'b solana_account_info::AccountInfo<'a>>,
401 fee_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
402 new_initialize_pool_authority: Option<&'b solana_account_info::AccountInfo<'a>>,
403 __remaining_accounts: Vec<(&'b solana_account_info::AccountInfo<'a>, bool, bool)>,
405}