cometbft_rpc/endpoint/
abci_query.rs1use cometbft::{abci::Code, block, merkle::proof::ProofOps, serializers};
4use serde::{Deserialize, Serialize};
5
6use crate::prelude::*;
7use crate::{dialect::Dialect, request::RequestMessage};
8
9#[derive(Clone, Debug, PartialEq, Eq, Serialize, Deserialize)]
11pub struct Request {
12 #[serde(skip_serializing_if = "Option::is_none")]
14 pub path: Option<String>,
15
16 #[serde(with = "serializers::bytes::hexstring")]
18 pub data: Vec<u8>,
19
20 #[serde(skip_serializing_if = "Option::is_none")]
22 pub height: Option<block::Height>,
23
24 #[serde(default)]
26 pub prove: bool,
27}
28
29impl Request {
30 pub fn new<D>(path: Option<String>, data: D, height: Option<block::Height>, prove: bool) -> Self
32 where
33 D: Into<Vec<u8>>,
34 {
35 Self {
36 path,
37 data: data.into(),
38 height,
39 prove,
40 }
41 }
42}
43
44impl RequestMessage for Request {
45 fn method(&self) -> crate::Method {
46 crate::Method::AbciQuery
47 }
48}
49
50impl<S: Dialect> crate::Request<S> for Request {
51 type Response = Response;
52}
53
54impl<S: Dialect> crate::SimpleRequest<S> for Request {
55 type Output = Response;
56}
57
58#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
60pub struct Response {
61 pub response: AbciQuery,
63}
64
65impl crate::Response for Response {}
66
67#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize, Default)]
69#[serde(default)]
70pub struct AbciQuery {
71 pub code: Code,
73
74 pub log: String,
76
77 #[serde(default = "String::new")]
79 pub info: String,
80
81 #[serde(with = "serializers::from_str")]
83 pub index: i64,
84
85 #[serde(default, with = "serializers::bytes::base64string")]
87 pub key: Vec<u8>,
88
89 #[serde(default, with = "serializers::bytes::base64string")]
91 pub value: Vec<u8>,
92
93 #[serde(alias = "proofOps")]
95 pub proof: Option<ProofOps>,
96
97 pub height: block::Height,
99
100 #[serde(default = "String::new")]
102 pub codespace: String,
103}