bee_inx/
block.rs

1// Copyright 2022 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use bee_block as bee;
5use inx::proto;
6
7use crate::{maybe_missing, Raw};
8
9/// The [`Block`] type.
10#[derive(Clone, Debug, PartialEq, Eq)]
11pub struct Block {
12    /// The [`BlockId`](bee::BlockId) of the block.
13    pub block_id: bee::BlockId,
14    /// The complete [`Block`](bee::Block) as raw bytes.
15    pub block: Raw<bee::Block>,
16}
17
18/// The [`BlockWithMetadata`] type.
19#[derive(Clone, Debug, PartialEq, Eq)]
20pub struct BlockWithMetadata {
21    /// The [`Metadata`](crate::BlockMetadata) of the block.
22    pub metadata: crate::BlockMetadata,
23    /// The complete [`Block`](bee::Block) as raw bytes.
24    pub block: Raw<bee::Block>,
25}
26
27impl TryFrom<proto::BlockWithMetadata> for BlockWithMetadata {
28    type Error = bee::InxError;
29
30    fn try_from(value: proto::BlockWithMetadata) -> Result<Self, Self::Error> {
31        Ok(BlockWithMetadata {
32            metadata: maybe_missing!(value.metadata).try_into()?,
33            block: maybe_missing!(value.block).data.into(),
34        })
35    }
36}
37
38impl From<BlockWithMetadata> for proto::BlockWithMetadata {
39    fn from(value: BlockWithMetadata) -> Self {
40        Self {
41            metadata: Some(value.metadata.into()),
42            block: Some(value.block.into()),
43        }
44    }
45}
46
47impl TryFrom<proto::Block> for Block {
48    type Error = bee::InxError;
49
50    fn try_from(value: proto::Block) -> Result<Self, Self::Error> {
51        Ok(Block {
52            block_id: maybe_missing!(value.block_id).try_into()?,
53            block: maybe_missing!(value.block).data.into(),
54        })
55    }
56}
57
58impl From<Block> for proto::Block {
59    fn from(value: Block) -> Self {
60        Self {
61            block_id: Some(value.block_id.into()),
62            block: Some(value.block.into()),
63        }
64    }
65}