1use bitflags::bitflags;
4use fvm_ipld_encoding::{strict_bytes, tuple::*};
5use serde::{Deserialize, Serialize};
6
7use crate::ActorID;
8
9#[derive(Serialize_tuple, Deserialize_tuple, PartialEq, Eq, Clone, Debug)]
12pub struct StampedEvent {
13 pub emitter: ActorID,
15 pub event: ActorEvent,
17}
18
19impl StampedEvent {
20 pub fn new(emitter: ActorID, event: ActorEvent) -> Self {
21 Self { emitter, event }
22 }
23}
24
25#[derive(Serialize_tuple, Deserialize_tuple, PartialEq, Eq, Clone, Debug)]
27#[serde(transparent)]
28pub struct ActorEvent {
29 pub entries: Vec<Entry>,
30}
31
32impl From<Vec<Entry>> for ActorEvent {
33 fn from(entries: Vec<Entry>) -> Self {
34 Self { entries }
35 }
36}
37
38bitflags! {
39 #[derive(Deserialize, Serialize, Copy, Clone, Eq, PartialEq, Debug)]
41 #[repr(transparent)] #[serde(transparent)]
43 pub struct Flags: u64 {
44 const FLAG_INDEXED_KEY = 0b00000001;
45 const FLAG_INDEXED_VALUE = 0b00000010;
46 const FLAG_INDEXED_ALL = Self::FLAG_INDEXED_KEY.bits() | Self::FLAG_INDEXED_VALUE.bits();
47 }
48}
49
50#[derive(Serialize_tuple, Deserialize_tuple, PartialEq, Eq, Clone, Debug)]
52pub struct Entry {
53 pub flags: Flags,
55 pub key: String,
57 pub codec: u64,
59 #[serde(with = "strict_bytes")]
61 pub value: Vec<u8>,
62}