use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::Addr;
use super::query_response::QueryResponseType;
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum DistributionQuery {
DelegatorWithdrawAddress { delegator_address: String },
#[cfg(feature = "cosmwasm_1_4")]
DelegationRewards {
delegator_address: String,
validator_address: String,
},
#[cfg(feature = "cosmwasm_1_4")]
DelegationTotalRewards { delegator_address: String },
#[cfg(feature = "cosmwasm_1_4")]
DelegatorValidators { delegator_address: String },
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
#[non_exhaustive]
pub struct DelegatorWithdrawAddressResponse {
pub withdraw_address: Addr,
}
impl_response_constructor!(DelegatorWithdrawAddressResponse, withdraw_address: Addr);
impl QueryResponseType for DelegatorWithdrawAddressResponse {}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct DelegationRewardsResponse {
pub rewards: Vec<DecCoin>,
}
impl_response_constructor!(DelegationRewardsResponse, rewards: Vec<DecCoin>);
impl QueryResponseType for DelegationRewardsResponse {}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub struct DecCoin {
pub denom: String,
pub amount: crate::Decimal256,
}
impl DecCoin {
pub fn new(amount: crate::Decimal256, denom: impl Into<String>) -> Self {
Self {
denom: denom.into(),
amount,
}
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[non_exhaustive]
pub struct DelegationTotalRewardsResponse {
pub rewards: Vec<DelegatorReward>,
pub total: Vec<DecCoin>,
}
impl_response_constructor!(
DelegationTotalRewardsResponse,
rewards: Vec<DelegatorReward>,
total: Vec<DecCoin>
);
impl QueryResponseType for DelegationTotalRewardsResponse {}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct DelegatorReward {
pub validator_address: String,
pub reward: Vec<DecCoin>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct DelegatorValidatorsResponse {
pub validators: Vec<String>,
}
impl_response_constructor!(DelegatorValidatorsResponse, validators: Vec<String>);
impl QueryResponseType for DelegatorValidatorsResponse {}