gmsol_sdk/client/ops/
role.rs1use std::ops::Deref;
2
3use gmsol_programs::gmsol_store::client::{accounts, args};
4use gmsol_solana_utils::transaction_builder::TransactionBuilder;
5use solana_sdk::{pubkey::Pubkey, signer::Signer};
6
7pub trait RoleOps<C> {
9 fn enable_role(&self, store: &Pubkey, role: &str) -> TransactionBuilder<C>;
11
12 fn disable_role(&self, store: &Pubkey, role: &str) -> TransactionBuilder<C>;
14
15 fn grant_role(&self, store: &Pubkey, user: &Pubkey, role: &str) -> TransactionBuilder<C>;
17
18 fn revoke_role(&self, store: &Pubkey, user: &Pubkey, role: &str) -> TransactionBuilder<C>;
20}
21
22impl<C: Deref<Target = impl Signer> + Clone> RoleOps<C> for crate::Client<C> {
23 fn enable_role(&self, store: &Pubkey, role: &str) -> TransactionBuilder<C> {
24 let authority = self.payer();
25 self.store_transaction()
26 .anchor_accounts(accounts::EnableRole {
27 authority,
28 store: *store,
29 })
30 .anchor_args(args::EnableRole {
31 role: role.to_string(),
32 })
33 }
34
35 fn disable_role(&self, store: &Pubkey, role: &str) -> TransactionBuilder<C> {
36 self.store_transaction()
37 .anchor_accounts(accounts::DisableRole {
38 authority: self.payer(),
39 store: *store,
40 })
41 .anchor_args(args::DisableRole {
42 role: role.to_string(),
43 })
44 }
45
46 fn grant_role(&self, store: &Pubkey, user: &Pubkey, role: &str) -> TransactionBuilder<C> {
47 let authority = self.payer();
48 self.store_transaction()
49 .anchor_accounts(accounts::GrantRole {
50 authority,
51 store: *store,
52 })
53 .anchor_args(args::GrantRole {
54 user: *user,
55 role: role.to_string(),
56 })
57 }
58
59 fn revoke_role(&self, store: &Pubkey, user: &Pubkey, role: &str) -> TransactionBuilder<C> {
60 self.store_transaction()
61 .anchor_args(args::RevokeRole {
62 user: *user,
63 role: role.to_string(),
64 })
65 .anchor_accounts(accounts::RevokeRole {
66 authority: self.payer(),
67 store: *store,
68 })
69 }
70}