pub use crate::{
psp22,
psp22::extensions::capped,
traits::psp22::{
extensions::capped::*,
*,
},
};
pub use capped::Internal as _;
use openbrush::traits::{
Balance,
Storage,
String,
};
pub use psp22::{
Internal as _,
Transfer as _,
};
pub const STORAGE_KEY: u32 = openbrush::storage_unique_key!(Data);
#[derive(Default, Debug)]
#[openbrush::upgradeable_storage(STORAGE_KEY)]
pub struct Data {
pub cap: Balance,
pub _reserved: Option<()>,
}
impl<T: Storage<Data>> PSP22Capped for T {
default fn cap(&self) -> Balance {
self.data().cap.clone()
}
}
pub trait Internal {
fn _init_cap(&mut self, cap: Balance) -> Result<(), PSP22Error>;
fn _is_cap_exceeded(&self, amount: &Balance) -> bool;
}
impl<T: Storage<Data> + Storage<psp22::Data>> Internal for T {
fn _init_cap(&mut self, cap: Balance) -> Result<(), PSP22Error> {
if cap == 0 {
return Err(PSP22Error::Custom(String::from("Cap must be above 0")))
}
self.data::<Data>().cap = cap;
Ok(())
}
fn _is_cap_exceeded(&self, amount: &Balance) -> bool {
if self.total_supply() + amount > self.cap() {
return true
}
false
}
}