tendermint/abci/response/
info.rs1use crate::{block, prelude::*, AppHash};
2use tendermint_proto::v0_37::abci as pb;
3
4use serde::{Deserialize, Serialize};
5
6#[doc = include_str!("../doc/response-info.md")]
7#[derive(Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize)]
8#[serde(default, try_from = "pb::ResponseInfo", into = "pb::ResponseInfo")]
9pub struct Info {
10 pub data: String,
12 pub version: String,
14 pub app_version: u64,
16 pub last_block_height: block::Height,
18 pub last_block_app_hash: AppHash,
20}
21
22tendermint_pb_modules! {
27 use super::Info;
28
29 impl From<Info> for pb::abci::ResponseInfo {
30 fn from(info: Info) -> Self {
31 Self {
32 data: info.data,
33 version: info.version,
34 app_version: info.app_version,
35 last_block_height: info.last_block_height.into(),
36 last_block_app_hash: info.last_block_app_hash.into(),
37 }
38 }
39 }
40
41 impl TryFrom<pb::abci::ResponseInfo> for Info {
42 type Error = crate::Error;
43
44 fn try_from(info: pb::abci::ResponseInfo) -> Result<Self, Self::Error> {
45 Ok(Self {
46 data: info.data,
47 version: info.version,
48 app_version: info.app_version,
49 last_block_height: info.last_block_height.try_into()?,
50 last_block_app_hash: info.last_block_app_hash.try_into()?,
51 })
52 }
53 }
54
55 impl Protobuf<pb::abci::ResponseInfo> for Info {}
56}