Skip to content

Commit

Permalink
Error handling improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
MissingNO57 committed Feb 7, 2025
1 parent 507d702 commit 90e065c
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 16 deletions.
12 changes: 5 additions & 7 deletions src/access_control/access_control_impl.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
use crate::access_control::error::{
insufficient_permissions_error, no_role_error, sender_is_not_role_admin_error,
};
use crate::access_control::error::{no_role_error, sender_is_not_role_admin_error};
use crate::access_control::storage::AccessControlStorage;
use crate::events::ResponseHandler;
use crate::permissions::is_super_admin;
Expand All @@ -16,7 +14,7 @@ impl AccessControl {
return Ok(());
}

Err(sender_is_not_role_admin_error(&role))
Err(sender_is_not_role_admin_error(role))
}

pub fn grant_role(
Expand Down Expand Up @@ -67,7 +65,7 @@ impl AccessControl {

pub fn ensure_has_role(storage: &dyn Storage, address: &Addr, role: &str) -> StdResult<()> {
if !AccessControlStorage::has_role(storage, address, role) {
return Err(no_role_error(address, role));
return Err(no_role_error(address, Some(role)));
}

Ok(())
Expand All @@ -84,7 +82,7 @@ impl AccessControl {
{
Ok(())
} else {
Err(no_role_error(address, role))
Err(no_role_error(address, Some(role)))
}
}

Expand All @@ -99,7 +97,7 @@ impl AccessControl {
}
}

Err(insufficient_permissions_error())
Err(no_role_error(address, None))
}

pub fn get_admin_role(storage: &dyn Storage, role: &str) -> StdResult<String> {
Expand Down
17 changes: 10 additions & 7 deletions src/access_control/error.rs
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
use cosmwasm_std::{Addr, StdError};

pub fn no_role_error(address: &Addr, role: &str) -> StdError {
StdError::generic_err(format!("Address {} does not have role {}", address, role))
}
pub fn insufficient_permissions_error() -> StdError {
StdError::generic_err("Insufficient permissions")
pub fn no_role_error(address: &Addr, role: Option<&str>) -> StdError {
let role_str = role
.map(|role| format!(" '{}'", role))
.unwrap_or(String::new());
StdError::generic_err(format!(
"Address {} does not have required role{}",
address, role_str
))
}

pub fn sender_is_not_role_admin_error<T: AsRef<str>>(role: &T) -> StdError {
StdError::generic_err(format!("Sender is not admin of role '{}'", role.as_ref()))
pub fn sender_is_not_role_admin_error(role: &str) -> StdError {
StdError::generic_err(format!("Sender is not admin of the '{}' role", role))
}
5 changes: 3 additions & 2 deletions src/access_control/storage.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ const HAS_ROLE: Map<(&str, &Addr), ()> = Map::new("has_role");
pub(crate) struct AccessControlStorage {}

impl AccessControlStorage {
#![allow(dead_code)]
fn remove_role(storage: &mut dyn Storage, response_handler: &mut ResponseHandler, role: &str) {
response_handler.add_event(AccessControlRoleRemovedEvent { role });

Expand All @@ -37,7 +36,7 @@ impl AccessControlStorage {
)
}

pub(crate) fn set_admin_role(
pub fn set_admin_role(
storage: &mut dyn Storage,
response_handler: &mut ResponseHandler,
role: &str,
Expand Down Expand Up @@ -88,6 +87,7 @@ impl AccessControlStorage {
HAS_ROLE.has(storage, (role, address))
}

#[allow(dead_code)]
pub fn range_all_addresses_with_role<'a>(
storage: &'a dyn Storage,
role: &str,
Expand All @@ -100,6 +100,7 @@ impl AccessControlStorage {
))
}

#[allow(dead_code)]
pub fn range_all_roles<'a>(
storage: &'a dyn Storage,
) -> Box<dyn Iterator<Item = StdResult<String>> + 'a> {
Expand Down

0 comments on commit 90e065c

Please sign in to comment.