Skip to content

Commit 33edeee

Browse files
refactor(basics): convert impl blocks to free handle_* functions
All 15 basics examples refactored to use free functions instead of impl methods on Accounts structs. Pattern: handle_{method_name}(accounts, ...) replaces self.method_name(...) on impl blocks.
1 parent 584c6dc commit 33edeee

39 files changed

Lines changed: 272 additions & 323 deletions

File tree

basics/account-data/quasar/src/instructions/create.rs

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,19 @@ pub struct CreateAddressInfo<'info> {
1515
pub system_program: &'info Program<System>,
1616
}
1717

18-
impl<'info> CreateAddressInfo<'info> {
19-
#[inline(always)]
20-
pub fn create_address_info(
21-
&mut self,
22-
name: &str,
23-
house_number: u8,
24-
street: &str,
25-
city: &str,
26-
) -> Result<(), ProgramError> {
27-
self.address_info.set_inner(
28-
house_number,
29-
name,
30-
street,
31-
city,
32-
self.payer.to_account_view(),
33-
None,
34-
)
35-
}
18+
#[inline(always)]
19+
pub fn handle_create_address_info(
20+
accounts: &mut CreateAddressInfo, name: &str,
21+
house_number: u8,
22+
street: &str,
23+
city: &str,
24+
) -> Result<(), ProgramError> {
25+
accounts.address_info.set_inner(
26+
house_number,
27+
name,
28+
street,
29+
city,
30+
accounts.payer.to_account_view(),
31+
None,
32+
)
3633
}

basics/account-data/quasar/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,6 @@ mod quasar_account_data {
3030
street: String,
3131
city: String,
3232
) -> Result<(), ProgramError> {
33-
ctx.accounts.create_address_info(name, house_number, street, city)
33+
instructions::handle_create_address_info(&mut ctx.accounts, name, house_number, street, city)
3434
}
3535
}

basics/checking-accounts/quasar/src/instructions/check_accounts.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,9 @@ pub struct CheckAccounts<'info> {
2121
pub system_program: &'info Program<System>,
2222
}
2323

24-
impl<'info> CheckAccounts<'info> {
25-
#[inline(always)]
26-
pub fn check_accounts(&self) -> Result<(), ProgramError> {
27-
// All validation happens declaratively via the account types above.
28-
// If any check fails, the runtime rejects the transaction before this runs.
29-
Ok(())
30-
}
24+
#[inline(always)]
25+
pub fn handle_check_accounts(accounts: &CheckAccounts) -> Result<(), ProgramError> {
26+
// All validation happens declaratively via the account types above.
27+
// If any check fails, the runtime rejects the transaction before this runs.
28+
Ok(())
3129
}

basics/checking-accounts/quasar/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,6 @@ mod quasar_checking_accounts {
1919
/// - Program<System>: checks account is executable and is the system program
2020
#[instruction(discriminator = 0)]
2121
pub fn check_accounts(ctx: Ctx<CheckAccounts>) -> Result<(), ProgramError> {
22-
ctx.accounts.check_accounts()
22+
instructions::handle_check_accounts(&mut ctx.accounts)
2323
}
2424
}

basics/close-account/quasar/src/instructions/close_user.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@ pub struct CloseUser<'info> {
1515
pub user_account: Account<UserState<'info>>,
1616
}
1717

18-
impl<'info> CloseUser<'info> {
19-
#[inline(always)]
20-
pub fn close_user(&mut self) -> Result<(), ProgramError> {
21-
self.user_account.close(self.user.to_account_view())
22-
}
18+
#[inline(always)]
19+
pub fn handle_close_user(accounts: &mut CloseUser) -> Result<(), ProgramError> {
20+
accounts.user_account.close(accounts.user.to_account_view())
2321
}

basics/close-account/quasar/src/instructions/create_user.rs

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,14 @@ pub struct CreateUser<'info> {
1313
pub system_program: &'info Program<System>,
1414
}
1515

16-
impl<'info> CreateUser<'info> {
17-
#[inline(always)]
18-
pub fn create_user(&mut self, name: &str, bump: u8) -> Result<(), ProgramError> {
19-
let user_address = *self.user.to_account_view().address();
20-
self.user_account.set_inner(
21-
bump,
22-
user_address,
23-
name,
24-
self.user.to_account_view(),
25-
None,
26-
)
27-
}
16+
#[inline(always)]
17+
pub fn handle_create_user(accounts: &mut CreateUser, name: &str, bump: u8) -> Result<(), ProgramError> {
18+
let user_address = *accounts.user.to_account_view().address();
19+
accounts.user_account.set_inner(
20+
bump,
21+
user_address,
22+
name,
23+
accounts.user.to_account_view(),
24+
None,
25+
)
2826
}

basics/close-account/quasar/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ mod quasar_close_account {
1818
#[instruction(discriminator = 0)]
1919
pub fn create_user(ctx: Ctx<CreateUser>, name: String) -> Result<(), ProgramError> {
2020
let bump = ctx.bumps.user_account;
21-
ctx.accounts.create_user(name, bump)
21+
instructions::handle_create_user(&mut ctx.accounts, name, bump)
2222
}
2323

2424
/// Close a user account and return lamports to the user.
2525
#[instruction(discriminator = 1)]
2626
pub fn close_user(ctx: Ctx<CloseUser>) -> Result<(), ProgramError> {
27-
ctx.accounts.close_user()
27+
instructions::handle_close_user(&mut ctx.accounts)
2828
}
2929
}

basics/counter/quasar/src/instructions/increment.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ pub struct Increment<'info> {
1010
pub counter: &'info mut Account<Counter>,
1111
}
1212

13-
impl<'info> Increment<'info> {
14-
#[inline(always)]
15-
pub fn increment(&mut self) -> Result<(), ProgramError> {
16-
let current: u64 = self.counter.count.into();
17-
self.counter.count = PodU64::from(current.checked_add(1).unwrap());
18-
Ok(())
19-
}
13+
#[inline(always)]
14+
pub fn handle_increment(accounts: &mut Increment) -> Result<(), ProgramError> {
15+
let current: u64 = accounts.counter.count.into();
16+
accounts.counter.count = PodU64::from(current.checked_add(1).unwrap());
17+
Ok(())
2018
}

basics/counter/quasar/src/instructions/initialize_counter.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@ pub struct InitializeCounter<'info> {
1414
pub system_program: &'info Program<System>,
1515
}
1616

17-
impl<'info> InitializeCounter<'info> {
18-
#[inline(always)]
19-
pub fn initialize_counter(&mut self) -> Result<(), ProgramError> {
20-
self.counter.set_inner(0u64);
21-
Ok(())
22-
}
17+
#[inline(always)]
18+
pub fn handle_initialize_counter(accounts: &mut InitializeCounter) -> Result<(), ProgramError> {
19+
accounts.counter.set_inner(0u64);
20+
Ok(())
2321
}

basics/counter/quasar/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ mod quasar_counter {
1616

1717
#[instruction(discriminator = 0)]
1818
pub fn initialize_counter(ctx: Ctx<InitializeCounter>) -> Result<(), ProgramError> {
19-
ctx.accounts.initialize_counter()
19+
instructions::handle_initialize_counter(&mut ctx.accounts)
2020
}
2121

2222
#[instruction(discriminator = 1)]
2323
pub fn increment(ctx: Ctx<Increment>) -> Result<(), ProgramError> {
24-
ctx.accounts.increment()
24+
instructions::handle_increment(&mut ctx.accounts)
2525
}
2626
}

0 commit comments

Comments
 (0)