Skip to main content

iroh_http_core/
events.rs

1//! Transport-level events emitted by the endpoint.
2
3use serde::Serialize;
4
5fn now_ms() -> u64 {
6    std::time::SystemTime::now()
7        .duration_since(std::time::UNIX_EPOCH)
8        .unwrap_or_default()
9        .as_millis() as u64
10}
11
12/// A transport-level event emitted by the endpoint.
13///
14/// Serialised with serde for the FFI boundary.  Adapters forward these as
15/// `CustomEvent('transport', { detail })` on the JS `IrohNode` instance.
16#[derive(Debug, Clone, Serialize)]
17#[serde(tag = "type", rename_all = "camelCase")]
18pub enum TransportEvent {
19    #[serde(rename = "pool:hit")]
20    PoolHit {
21        #[serde(rename = "peerId")]
22        peer_id: String,
23        timestamp: u64,
24    },
25    #[serde(rename = "pool:miss")]
26    PoolMiss {
27        #[serde(rename = "peerId")]
28        peer_id: String,
29        timestamp: u64,
30    },
31    #[serde(rename = "pool:evict")]
32    PoolEvict {
33        #[serde(rename = "peerId")]
34        peer_id: String,
35        timestamp: u64,
36    },
37    #[serde(rename = "path:change")]
38    PathChange {
39        #[serde(rename = "peerId")]
40        peer_id: String,
41        addr: String,
42        relay: bool,
43        timestamp: u64,
44    },
45    #[serde(rename = "handle:sweep")]
46    HandleSweep { evicted: u64, timestamp: u64 },
47}
48
49impl TransportEvent {
50    pub fn pool_hit(peer_id: impl Into<String>) -> Self {
51        Self::PoolHit {
52            peer_id: peer_id.into(),
53            timestamp: now_ms(),
54        }
55    }
56    pub fn pool_miss(peer_id: impl Into<String>) -> Self {
57        Self::PoolMiss {
58            peer_id: peer_id.into(),
59            timestamp: now_ms(),
60        }
61    }
62    pub fn pool_evict(peer_id: impl Into<String>) -> Self {
63        Self::PoolEvict {
64            peer_id: peer_id.into(),
65            timestamp: now_ms(),
66        }
67    }
68    pub fn path_change(peer_id: impl Into<String>, addr: impl Into<String>, relay: bool) -> Self {
69        Self::PathChange {
70            peer_id: peer_id.into(),
71            addr: addr.into(),
72            relay,
73            timestamp: now_ms(),
74        }
75    }
76    pub fn handle_sweep(evicted: u64) -> Self {
77        Self::HandleSweep {
78            evicted,
79            timestamp: now_ms(),
80        }
81    }
82}