1use super::{Address, Identifier, ObjectId, StructTag};
6
7#[derive(Clone, Debug, Default, derive_more::Deref, derive_more::DerefMut, Eq, Hash, PartialEq)]
17#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
18#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
19#[cfg_attr(feature = "bcs-schema", derive(iota_bcs_schema::BcsSchema))]
20pub struct TransactionEvents(pub Vec<Event>);
21
22impl crate::TreeDisplay for TransactionEvents {
23 fn fmt_tree(&self, w: &mut crate::TreeWriter<'_, '_>) -> std::fmt::Result {
24 w.header("Transaction Events")?;
25 w.children("Events", &self.0, true)
26 }
27}
28
29#[derive(Clone, derive_more::Debug, Eq, Hash, PartialEq)]
39#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
40#[cfg_attr(feature = "proptest", derive(test_strategy::Arbitrary))]
41#[cfg_attr(feature = "bcs-schema", derive(iota_bcs_schema::BcsSchema))]
42pub struct Event {
43 pub package_id: ObjectId,
46 pub module: Identifier,
49 pub sender: Address,
52 #[cfg_attr(feature = "serde", serde(rename = "type"))]
54 pub struct_tag: StructTag,
55 #[cfg_attr(
57 feature = "serde",
58 serde(with = "crate::_serde::ReadableBase64Encoded")
59 )]
60 #[debug("{:?}", <base64ct::Base64 as base64ct::Encoding>::encode_string(contents))]
61 pub contents: Vec<u8>,
62}
63
64impl Event {
65 fn is_system_epoch_info_event_type(&self, name: Identifier) -> bool {
66 self.struct_tag.address() == Address::SYSTEM
67 && *self.struct_tag.module() == Identifier::IOTA_SYSTEM_STATE_INNER_MODULE
68 && *self.struct_tag.name() == name
69 }
70
71 pub fn is_system_epoch_info_event(&self) -> bool {
73 self.is_system_epoch_info_event_v1() || self.is_system_epoch_info_event_v2()
74 }
75
76 pub fn is_system_epoch_info_event_v1(&self) -> bool {
79 self.is_system_epoch_info_event_type(Identifier::SYSTEM_EPOCH_INFO_EVENT_V1)
80 }
81
82 pub fn is_system_epoch_info_event_v2(&self) -> bool {
85 self.is_system_epoch_info_event_type(Identifier::SYSTEM_EPOCH_INFO_EVENT_V2)
86 }
87}
88
89impl crate::TreeDisplay for Event {
90 fn fmt_tree(&self, w: &mut crate::TreeWriter<'_, '_>) -> std::fmt::Result {
91 w.header("Event")?;
92 w.leaf("Package ID", &self.package_id, false)?;
93 w.leaf("Module", &self.module, false)?;
94 w.leaf("Sender", &self.sender, false)?;
95 w.leaf("Struct Tag", &self.struct_tag, false)?;
96 w.leaf("Contents", &hex::encode(&self.contents), true)
97 }
98}
99
100crate::impl_tree_display!(TransactionEvents, Event);