use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use cosmwasm_std::{ReadonlyStorage, Storage};
use cosmwasm_storage::{bucket, bucket_read, Bucket, ReadonlyBucket};
use cw0::{Expiration, NativeBalance};
use std::fmt;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default, Copy)]
pub struct Permissions {
pub delegate: bool,
pub redelegate: bool,
pub undelegate: bool,
pub withdraw: bool,
}
impl fmt::Display for Permissions {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"staking: {{ delegate: {}, redelegate: {}, undelegate: {}, withdraw: {} }}",
self.delegate, self.redelegate, self.undelegate, self.withdraw
)
}
}
const PREFIX_PERMISSIONS: &[u8] = b"permissions";
pub fn permissions<S: Storage>(storage: &mut S) -> Bucket<S, Permissions> {
bucket(storage, PREFIX_PERMISSIONS)
}
pub fn permissions_read<S: ReadonlyStorage>(storage: &S) -> ReadonlyBucket<S, Permissions> {
bucket_read(storage, PREFIX_PERMISSIONS)
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema, Default)]
pub struct Allowance {
pub balance: NativeBalance,
pub expires: Expiration,
}
const PREFIX_ALLOWANCE: &[u8] = b"allowance";
pub fn allowances<S: Storage>(storage: &mut S) -> Bucket<S, Allowance> {
bucket(storage, PREFIX_ALLOWANCE)
}
pub fn allowances_read<S: ReadonlyStorage>(storage: &S) -> ReadonlyBucket<S, Allowance> {
bucket_read(storage, PREFIX_ALLOWANCE)
}