iq_cometbft/block/
meta.rs1use cometbft_proto::types::v1::BlockMeta as RawMeta;
4use serde::{Deserialize, Serialize};
5
6use super::{Header, Id};
7use crate::prelude::*;
8
9#[derive(Serialize, Deserialize, Clone, Debug)]
11#[serde(try_from = "RawMeta", into = "RawMeta")]
12pub struct Meta {
13 pub block_id: Id,
15
16 pub block_size: i64,
18
19 pub header: Header,
21
22 pub num_txs: i64,
24}
25
26cometbft_old_pb_modules! {
27 use super::Meta;
28 use crate::{error::Error, prelude::*};
29 use pb::types::BlockMeta as RawMeta;
30
31 impl TryFrom<RawMeta> for Meta {
32 type Error = Error;
33
34 fn try_from(value: RawMeta) -> Result<Self, Self::Error> {
35 Ok(Meta {
36 block_id: value
37 .block_id
38 .ok_or_else(|| Error::invalid_block("no block_id".to_string()))?
39 .try_into()?,
40 block_size: value.block_size,
41 header: value
42 .header
43 .ok_or_else(|| Error::invalid_block("no header".to_string()))?
44 .try_into()?,
45 num_txs: value.num_txs,
46 })
47 }
48 }
49
50 impl From<Meta> for RawMeta {
51 fn from(value: Meta) -> Self {
52 RawMeta {
53 block_id: Some(value.block_id.into()),
54 block_size: value.block_size,
55 header: Some(value.header.into()),
56 num_txs: value.num_txs,
57 }
58 }
59 }
60}
61
62mod v1 {
63 use super::Meta;
64 use crate::{error::Error, prelude::*};
65 use cometbft_proto::types::v1 as pb;
66
67 impl TryFrom<pb::BlockMeta> for Meta {
68 type Error = Error;
69
70 fn try_from(value: pb::BlockMeta) -> Result<Self, Self::Error> {
71 Ok(Meta {
72 block_id: value
73 .block_id
74 .ok_or_else(|| Error::invalid_block("no block_id".to_string()))?
75 .try_into()?,
76 block_size: value.block_size,
77 header: value
78 .header
79 .ok_or_else(|| Error::invalid_block("no header".to_string()))?
80 .try_into()?,
81 num_txs: value.num_txs,
82 })
83 }
84 }
85
86 impl From<Meta> for pb::BlockMeta {
87 fn from(value: Meta) -> Self {
88 pb::BlockMeta {
89 block_id: Some(value.block_id.into()),
90 block_size: value.block_size,
91 header: Some(value.header.into()),
92 num_txs: value.num_txs,
93 }
94 }
95 }
96}
97
98mod v1beta1 {
99 use super::Meta;
100 use crate::{error::Error, prelude::*};
101 use cometbft_proto::types::v1beta1 as pb;
102
103 impl TryFrom<pb::BlockMeta> for Meta {
104 type Error = Error;
105
106 fn try_from(value: pb::BlockMeta) -> Result<Self, Self::Error> {
107 Ok(Meta {
108 block_id: value
109 .block_id
110 .ok_or_else(|| Error::invalid_block("no block_id".to_string()))?
111 .try_into()?,
112 block_size: value.block_size,
113 header: value
114 .header
115 .ok_or_else(|| Error::invalid_block("no header".to_string()))?
116 .try_into()?,
117 num_txs: value.num_txs,
118 })
119 }
120 }
121
122 impl From<Meta> for pb::BlockMeta {
123 fn from(value: Meta) -> Self {
124 pb::BlockMeta {
125 block_id: Some(value.block_id.into()),
126 block_size: value.block_size,
127 header: Some(value.header.into()),
128 num_txs: value.num_txs,
129 }
130 }
131 }
132}