use crate::security::errors::Error;
use crate::security::events::{Paused, Unpaused};
use odra::prelude::*;
#[odra::module(events = [Paused, Unpaused], errors = Error)]
pub struct Pauseable {
is_paused: Var<bool>
}
impl Pauseable {
pub fn is_paused(&self) -> bool {
self.is_paused.get_or_default()
}
pub fn require_not_paused(&self) {
if self.is_paused() {
self.env().revert(Error::UnpausedRequired);
}
}
pub fn require_paused(&self) {
if !self.is_paused() {
self.env().revert(Error::PausedRequired);
}
}
pub fn pause(&mut self) {
self.require_not_paused();
self.is_paused.set(true);
self.env().emit_event(Paused {
account: self.env().caller()
});
}
pub fn unpause(&mut self) {
self.require_paused();
self.is_paused.set(false);
self.env().emit_event(Unpaused {
account: self.env().caller()
});
}
}