Skip to main content

ant_node/
event.rs

1//! Node event system.
2
3use tokio::sync::broadcast;
4
5/// Events emitted by the node.
6#[derive(Debug, Clone)]
7pub enum NodeEvent {
8    /// Node has started successfully.
9    Started,
10
11    /// Node is shutting down.
12    ShuttingDown,
13
14    /// Connected to a peer.
15    PeerConnected {
16        /// Peer identifier.
17        peer_id: String,
18    },
19
20    /// Disconnected from a peer.
21    PeerDisconnected {
22        /// Peer identifier.
23        peer_id: String,
24    },
25
26    /// Data stored successfully.
27    DataStored {
28        /// Data address/key.
29        address: String,
30    },
31
32    /// Data retrieved successfully.
33    DataRetrieved {
34        /// Data address/key.
35        address: String,
36    },
37
38    /// Upgrade available.
39    UpgradeAvailable {
40        /// New version.
41        version: String,
42    },
43
44    /// Upgrade started.
45    UpgradeStarted {
46        /// Version being installed.
47        version: String,
48    },
49
50    /// Upgrade completed.
51    UpgradeComplete {
52        /// New version.
53        version: String,
54    },
55
56    /// Error occurred.
57    Error {
58        /// Error message.
59        message: String,
60    },
61}
62
63/// Channel for receiving node events.
64pub type NodeEventsChannel = broadcast::Receiver<NodeEvent>;
65
66/// Sender for node events.
67pub type NodeEventsSender = broadcast::Sender<NodeEvent>;
68
69/// Create a new event channel pair.
70#[must_use]
71pub fn create_event_channel() -> (NodeEventsSender, NodeEventsChannel) {
72    broadcast::channel(256)
73}