1use 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}