use serde::{Deserialize, Serialize};
use tendermint::{block, validator};
use crate::{
dialect::Dialect, prelude::*, request::RequestMessage, serializers, PageNumber, PerPage,
};
pub const DEFAULT_VALIDATORS_PER_PAGE: u8 = 30;
#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
#[non_exhaustive]
pub struct Request {
pub height: Option<block::Height>,
#[serde(with = "serializers::optional_from_str")]
pub page: Option<PageNumber>,
#[serde(with = "serializers::optional_from_str")]
pub per_page: Option<PerPage>,
}
impl Request {
pub fn new(
height: Option<block::Height>,
page: Option<PageNumber>,
per_page: Option<PerPage>,
) -> Self {
Self {
height,
page,
per_page,
}
}
}
impl RequestMessage for Request {
fn method(&self) -> crate::Method {
crate::Method::Validators
}
}
impl<S: Dialect> crate::Request<S> for Request {
type Response = Response;
}
impl<S: Dialect> crate::SimpleRequest<S> for Request {
type Output = Response;
}
#[derive(Clone, Debug, Deserialize, Serialize)]
#[non_exhaustive]
pub struct Response {
pub block_height: block::Height,
pub validators: Vec<validator::Info>,
#[serde(with = "serializers::from_str")]
pub total: i32,
}
impl crate::Response for Response {}
impl Response {
pub fn new(block_height: block::Height, validators: Vec<validator::Info>, total: i32) -> Self {
Self {
block_height,
validators,
total,
}
}
}