use crate::modules::whitelist::events::{AddedToWhitelist, RemovedFromWhitelist};
use crate::utils::Error;
use odra::contract_env::{caller, revert};
use odra::types::event::OdraEvent;
use odra::types::Address;
use odra::Mapping;
#[odra::module]
pub struct Whitelist {
pub whitelist: Mapping<Address, bool>,
}
#[odra::module]
impl Whitelist {
pub fn add_to_whitelist(&mut self, address: Address) {
self.whitelist.set(&address, true);
AddedToWhitelist { address }.emit();
}
pub fn remove_from_whitelist(&mut self, address: Address) {
self.whitelist.set(&address, false);
RemovedFromWhitelist { address }.emit();
}
pub fn ensure_whitelisted(&self) {
if !self.is_whitelisted(caller()) {
revert(Error::NotWhitelisted);
}
}
pub fn is_whitelisted(&self, address: Address) -> bool {
self.whitelist.get(&address).unwrap_or(false)
}
}
pub mod events {
use odra::types::Address;
use odra::Event;
#[derive(Debug, PartialEq, Eq, Event)]
pub struct AddedToWhitelist {
pub address: Address,
}
#[derive(Debug, PartialEq, Eq, Event)]
pub struct RemovedFromWhitelist {
pub address: Address,
}
}