ndn_transport/
face_event.rs

1use crate::FaceId;
2
3/// Lifecycle events emitted by face tasks.
4///
5/// When a face task's `recv()` returns `FaceError::Closed`, the task removes
6/// itself from the `FaceTable` and sends `FaceEvent::Closed(id)` to the face
7/// manager. The manager then cleans up any PIT `OutRecord` entries for that
8/// face.
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum FaceEvent {
11    /// A new face has been registered and its task is running.
12    Opened(FaceId),
13    /// A face has closed (remote disconnect or I/O error).
14    Closed(FaceId),
15}
16
17impl FaceEvent {
18    pub fn face_id(&self) -> FaceId {
19        match self {
20            FaceEvent::Opened(id) | FaceEvent::Closed(id) => *id,
21        }
22    }
23}
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28
29    #[test]
30    fn face_id_accessor() {
31        let opened = FaceEvent::Opened(FaceId(3));
32        let closed = FaceEvent::Closed(FaceId(7));
33        assert_eq!(opened.face_id(), FaceId(3));
34        assert_eq!(closed.face_id(), FaceId(7));
35    }
36
37    #[test]
38    fn events_are_clone_and_eq() {
39        let e = FaceEvent::Closed(FaceId(1));
40        assert_eq!(e.clone(), e);
41    }
42}