Skip to main content

ethexe_common/events/
mod.rs

1// Copyright (C) Gear Technologies Inc.
2// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0
3
4use gprimitives::ActorId;
5use parity_scale_codec::{Decode, Encode};
6use scale_info::TypeInfo;
7
8pub mod mirror;
9pub mod router;
10pub mod wvara;
11
12pub use mirror::{Event as MirrorEvent, RequestEvent as MirrorRequestEvent};
13pub use router::{Event as RouterEvent, RequestEvent as RouterRequestEvent};
14pub use wvara::Event as WVaraEvent;
15
16#[derive(Clone, Debug, PartialEq, Eq, Decode, Encode, TypeInfo, Hash)]
17pub enum BlockEvent {
18    Mirror {
19        actor_id: ActorId,
20        event: MirrorEvent,
21    },
22    Router(RouterEvent),
23}
24
25impl BlockEvent {
26    pub fn mirror(actor_id: ActorId, event: MirrorEvent) -> Self {
27        Self::Mirror { actor_id, event }
28    }
29
30    pub fn to_request(self) -> Option<BlockRequestEvent> {
31        Some(match self {
32            Self::Mirror { actor_id, event } => BlockRequestEvent::Mirror {
33                actor_id,
34                event: event.to_request()?,
35            },
36            Self::Router(event) => BlockRequestEvent::Router(event.to_request()?),
37        })
38    }
39}
40
41impl From<(ActorId, MirrorEvent)> for BlockEvent {
42    fn from((actor_id, event): (ActorId, MirrorEvent)) -> Self {
43        Self::mirror(actor_id, event)
44    }
45}
46
47impl From<RouterEvent> for BlockEvent {
48    fn from(value: RouterEvent) -> Self {
49        Self::Router(value)
50    }
51}
52
53#[derive(Clone, Debug, PartialEq, Eq, Decode, Encode)]
54#[cfg_attr(feature = "std", derive(serde::Serialize, serde::Deserialize))]
55pub enum BlockRequestEvent {
56    Router(RouterRequestEvent),
57    Mirror {
58        actor_id: ActorId,
59        event: MirrorRequestEvent,
60    },
61}
62
63impl BlockRequestEvent {
64    pub fn mirror(actor_id: ActorId, event: MirrorRequestEvent) -> Self {
65        Self::Mirror { actor_id, event }
66    }
67}
68
69impl From<(ActorId, MirrorRequestEvent)> for BlockRequestEvent {
70    fn from((actor_id, event): (ActorId, MirrorRequestEvent)) -> Self {
71        Self::mirror(actor_id, event)
72    }
73}
74
75impl From<RouterRequestEvent> for BlockRequestEvent {
76    fn from(value: RouterRequestEvent) -> Self {
77        Self::Router(value)
78    }
79}