use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use std::fmt;
use cosmwasm_std::{CosmosMsg, Decimal, Empty, HumanAddr};
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: HumanAddr },
ListVotes {
proposal_id: u64,
start_after: Option<HumanAddr>,
limit: Option<u32>,
},
Voter { address: HumanAddr },
ListVoters {
start_after: Option<HumanAddr>,
limit: Option<u32>,
},
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "snake_case")]
pub enum ThresholdResponse {
AbsoluteCount {
weight_needed: u64,
total_weight: u64,
},
AbsolutePercentage {
percentage_needed: Decimal,
total_weight: u64,
},
ThresholdQuora {
threshold: Decimal,
quroum: 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 expires: Expiration,
pub status: Status,
}
#[derive(Serialize, Deserialize, Clone, Copy, PartialEq, JsonSchema, Debug)]
#[serde(rename_all = "lowercase")]
pub enum Status {
Pending,
Open,
Rejected,
Passed,
Executed,
}
#[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: HumanAddr,
pub vote: Vote,
pub weight: u64,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoteResponse {
pub vote: Option<Vote>,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoterResponse {
pub addr: HumanAddr,
pub weight: u64,
}
#[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)]
pub struct VoterListResponse {
pub voters: Vec<VoterResponse>,
}