bee_block/payload/transaction/essence/
mod.rs1mod regular;
5
6use crypto::hashes::{blake2b::Blake2b256, Digest};
7use derive_more::From;
8use packable::PackableExt;
9
10pub(crate) use self::regular::{InputCount, OutputCount};
11pub use self::regular::{RegularTransactionEssence, RegularTransactionEssenceBuilder};
12use crate::Error;
13
14#[derive(Clone, Debug, Eq, PartialEq, From, packable::Packable)]
16#[cfg_attr(
17 feature = "serde",
18 derive(serde::Serialize, serde::Deserialize),
19 serde(tag = "type", content = "data")
20)]
21#[packable(unpack_error = Error)]
22#[packable(tag_type = u8, with_error = Error::InvalidEssenceKind)]
23pub enum TransactionEssence {
24 #[packable(tag = RegularTransactionEssence::KIND)]
26 Regular(RegularTransactionEssence),
27}
28
29impl TransactionEssence {
30 pub fn kind(&self) -> u8 {
32 match self {
33 Self::Regular(_) => RegularTransactionEssence::KIND,
34 }
35 }
36
37 pub fn hash(&self) -> [u8; 32] {
39 Blake2b256::digest(&self.pack_to_vec()).into()
40 }
41}
42
43#[cfg(feature = "dto")]
44#[allow(missing_docs)]
45pub mod dto {
46 use serde::{Deserialize, Serialize};
47
48 pub use super::regular::dto::RegularTransactionEssenceDto;
49 use super::*;
50 use crate::{error::dto::DtoError, protocol::ProtocolParameters};
51
52 #[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize, From)]
54 #[serde(untagged)]
55 pub enum TransactionEssenceDto {
56 Regular(RegularTransactionEssenceDto),
57 }
58
59 impl From<&TransactionEssence> for TransactionEssenceDto {
60 fn from(value: &TransactionEssence) -> Self {
61 match value {
62 TransactionEssence::Regular(r) => TransactionEssenceDto::Regular(r.into()),
63 }
64 }
65 }
66
67 impl TransactionEssence {
68 pub fn try_from_dto(
69 value: &TransactionEssenceDto,
70 protocol_parameters: &ProtocolParameters,
71 ) -> Result<TransactionEssence, DtoError> {
72 match value {
73 TransactionEssenceDto::Regular(r) => Ok(TransactionEssence::Regular(
74 RegularTransactionEssence::try_from_dto(r, protocol_parameters)?,
75 )),
76 }
77 }
78 }
79}