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