use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt;
use cosmwasm_std::{Coin, CosmosMsg, Empty};
use cw0::{Expiration, NativeBalance};
use crate::state::Permissions;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum ExecuteMsg<T = Empty>
where
T: Clone + fmt::Debug + PartialEq + JsonSchema,
{
Execute { msgs: Vec<CosmosMsg<T>> },
Freeze {},
UpdateAdmins { admins: Vec<String> },
IncreaseAllowance {
spender: String,
amount: Coin,
expires: Option<Expiration>,
},
DecreaseAllowance {
spender: String,
amount: Coin,
expires: Option<Expiration>,
},
SetPermissions {
spender: String,
permissions: Permissions,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum QueryMsg<T = Empty>
where
T: Clone + fmt::Debug + PartialEq + JsonSchema,
{
AdminList {},
Allowance { spender: String },
Permissions { spender: String },
CanExecute { sender: String, msg: CosmosMsg<T> },
AllAllowances {
start_after: Option<String>,
limit: Option<u32>,
},
AllPermissions {
start_after: Option<String>,
limit: Option<u32>,
},
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct AllAllowancesResponse {
pub allowances: Vec<AllowanceInfo>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct AllowanceInfo {
pub spender: String,
pub balance: NativeBalance,
pub expires: Expiration,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct PermissionsInfo {
pub spender: String,
pub permissions: Permissions,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
pub struct AllPermissionsResponse {
pub permissions: Vec<PermissionsInfo>,
}