tendermint/abci/response/
info.rs

1use 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    /// Some arbitrary information.
11    pub data: String,
12    /// The application software semantic version.
13    pub version: String,
14    /// The application protocol version.
15    pub app_version: u64,
16    /// The latest block for which the app has called [`Commit`](super::super::Request::Commit).
17    pub last_block_height: block::Height,
18    /// The latest result of [`Commit`](super::super::Request::Commit).
19    pub last_block_app_hash: AppHash,
20}
21
22// =============================================================================
23// Protobuf conversions
24// =============================================================================
25
26tendermint_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}