Skip to main content

nysiris_testkit/
lib.rs

1//! In-memory transport for tests and the Phase 0 mock daemon mode.
2
3use std::sync::{Arc, Mutex};
4
5use nysiris_core::error::Result;
6use nysiris_core::transport::{SentPayload, Transport};
7
8#[derive(Clone, Default)]
9pub struct MemoryTransport {
10    sent: Arc<Mutex<Vec<SentPayload>>>,
11}
12
13impl MemoryTransport {
14    pub fn new() -> Self {
15        Self::default()
16    }
17
18    pub fn sent(&self) -> Vec<SentPayload> {
19        self.sent.lock().expect("transport lock").clone()
20    }
21
22    pub fn take(&self) -> Vec<SentPayload> {
23        std::mem::take(&mut *self.sent.lock().expect("transport lock"))
24    }
25
26    pub fn len(&self) -> usize {
27        self.sent.lock().expect("transport lock").len()
28    }
29
30    pub fn is_empty(&self) -> bool {
31        self.len() == 0
32    }
33}
34
35impl Transport for MemoryTransport {
36    fn name(&self) -> &'static str {
37        "memory"
38    }
39
40    fn send(&self, recipient: &str, payload: Vec<u8>) -> Result<()> {
41        self.sent.lock().expect("transport lock").push(SentPayload {
42            recipient: recipient.to_string(),
43            payload,
44        });
45        Ok(())
46    }
47}