use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt;
use cosmwasm_std::{CosmosMsg, Decimal, Empty};
use cw0::Expiration;
use crate::msg::Vote;
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "snake_case")]
pub enum Cw3QueryMsg {
Threshold {},
Proposal { proposal_id: u64 },
ListProposals {
start_after: Option<u64>,
limit: Option<u32>,
},
ReverseProposals {
start_before: Option<u64>,
limit: Option<u32>,
},
Vote { proposal_id: u64, voter: String },
ListVotes {
proposal_id: u64,
start_after: Option<String>,
limit: Option<u32>,
},
Voter { address: String },
ListVoters {
start_after: Option<String>,
limit: Option<u32>,
},
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "snake_case")]
pub enum ThresholdResponse {
AbsoluteCount { weight: u64, total_weight: u64 },
AbsolutePercentage {
percentage: Decimal,
total_weight: u64,
},
ThresholdQuorum {
threshold: Decimal,
quorum: Decimal,
total_weight: u64,
},
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct ProposalResponse<T = Empty>
where
T: Clone + fmt::Debug + PartialEq + JsonSchema,
{
pub id: u64,
pub title: String,
pub description: String,
pub msgs: Vec<CosmosMsg<T>>,
pub status: Status,
pub expires: Expiration,
pub threshold: ThresholdResponse,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "lowercase")]
#[repr(u8)]
pub enum Status {
Pending = 1,
Open = 2,
Rejected = 3,
Passed = 4,
Executed = 5,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct ProposalListResponse {
pub proposals: Vec<ProposalResponse>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoteListResponse {
pub votes: Vec<VoteInfo>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoteInfo {
pub voter: String,
pub vote: Vote,
pub weight: u64,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoteResponse {
pub vote: Option<VoteInfo>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoterResponse {
pub weight: Option<u64>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoterListResponse {
pub voters: Vec<VoterDetail>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoterDetail {
pub addr: String,
pub weight: u64,
}