diem_types/
contract_event.rs1use crate::event::EventKey;
9use diem_crypto_derive::{BCSCryptoHash, CryptoHasher};
10
11use serde::{Deserialize, Serialize};
12use std::ops::Deref;
13
14#[derive(
16 Hash,
17 Clone,
18 Eq,
19 PartialEq,
20 Serialize,
21 Deserialize,
22 CryptoHasher,
23 BCSCryptoHash,
24)]
25pub enum ContractEvent {
26 V0(ContractEventV0),
27}
28
29impl ContractEvent {
30 pub fn new(key: EventKey, event_data: Vec<u8>) -> Self {
31 ContractEvent::V0(ContractEventV0::new(key, event_data))
32 }
33}
34
35impl Deref for ContractEvent {
38 type Target = ContractEventV0;
39
40 fn deref(&self) -> &Self::Target {
41 match self {
42 ContractEvent::V0(event) => event,
43 }
44 }
45}
46
47#[derive(Hash, Clone, Eq, PartialEq, Serialize, Deserialize, CryptoHasher)]
49pub struct ContractEventV0 {
50 key: EventKey,
52 #[serde(with = "serde_bytes")]
54 event_data: Vec<u8>,
55}
56
57impl ContractEventV0 {
58 pub fn new(key: EventKey, event_data: Vec<u8>) -> Self {
59 Self { key, event_data }
60 }
61
62 pub fn key(&self) -> &EventKey { &self.key }
63
64 pub fn event_data(&self) -> &[u8] { &self.event_data }
65}
66
67impl std::fmt::Debug for ContractEvent {
68 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
69 write!(
70 f,
71 "ContractEvent {{ key: {:?}, event_data: {:?} }}",
72 self.key,
73 hex::encode(&self.event_data)
74 )
75 }
76}
77
78impl std::fmt::Display for ContractEvent {
79 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
80 write!(f, "{:?}", self)
81 }
82}