cometbft_rpc/endpoint/
validators.rs1use cometbft::{block, validator};
4use serde::{Deserialize, Serialize};
5
6use crate::{
7 dialect::Dialect, prelude::*, request::RequestMessage, serializers, PageNumber, PerPage,
8};
9
10pub const DEFAULT_VALIDATORS_PER_PAGE: u8 = 30;
12
13#[derive(Clone, Debug, Default, Deserialize, Eq, PartialEq, Serialize)]
15#[non_exhaustive]
16pub struct Request {
17 pub height: Option<block::Height>,
20 #[serde(with = "serializers::optional_from_str")]
22 pub page: Option<PageNumber>,
23 #[serde(with = "serializers::optional_from_str")]
25 pub per_page: Option<PerPage>,
26}
27
28impl Request {
29 pub fn new(
36 height: Option<block::Height>,
37 page: Option<PageNumber>,
38 per_page: Option<PerPage>,
39 ) -> Self {
40 Self {
41 height,
42 page,
43 per_page,
44 }
45 }
46}
47
48impl RequestMessage for Request {
49 fn method(&self) -> crate::Method {
50 crate::Method::Validators
51 }
52}
53
54impl<S: Dialect> crate::Request<S> for Request {
55 type Response = Response;
56}
57
58impl<S: Dialect> crate::SimpleRequest<S> for Request {
59 type Output = Response;
60}
61
62#[derive(Clone, Debug, Deserialize, Serialize)]
64#[non_exhaustive]
65pub struct Response {
66 pub block_height: block::Height,
68
69 pub validators: Vec<validator::Info>,
71
72 #[serde(with = "serializers::from_str")]
74 pub total: i32,
75}
76
77impl crate::Response for Response {}
78
79impl Response {
80 pub fn new(block_height: block::Height, validators: Vec<validator::Info>, total: i32) -> Self {
82 Self {
83 block_height,
84 validators,
85 total,
86 }
87 }
88}