pub use crate::traits::access_control::*;
use openbrush::{
storage::{
Mapping,
TypeGuard,
},
traits::AccountId,
};
pub const STORAGE_KEY: u32 = openbrush::storage_unique_key!(Members);
#[derive(Default, Debug)]
#[openbrush::upgradeable_storage(STORAGE_KEY)]
pub struct Members {
pub members: Mapping<(RoleType, AccountId), (), MembersKey>,
pub _reserved: Option<()>,
}
pub struct MembersKey;
impl<'a> TypeGuard<'a> for MembersKey {
type Type = &'a (RoleType, &'a AccountId);
}
pub trait MembersManager {
fn has_role(&self, role: RoleType, address: &AccountId) -> bool;
fn add(&mut self, role: RoleType, member: &AccountId);
fn remove(&mut self, role: RoleType, member: &AccountId);
}
impl MembersManager for Members {
fn has_role(&self, role: RoleType, address: &AccountId) -> bool {
self.members.contains(&(role, address))
}
fn add(&mut self, role: RoleType, member: &AccountId) {
self.members.insert(&(role, member), &());
}
fn remove(&mut self, role: RoleType, member: &AccountId) {
self.members.remove(&(role, member));
}
}