memfault_ssf/
service_mock.rs

1//
2// Copyright (c) Memfault, Inc.
3// See License.txt for details
4use std::sync::mpsc::Receiver;
5
6use crate::{Message, MsgMailbox};
7
8/// The ServiceMock allows you to mock a service processing messages of a specific type.
9pub struct ServiceMock<M: Message> {
10    pub mbox: MsgMailbox<M>,
11    receiver: Receiver<M>,
12}
13
14impl<M: Message> ServiceMock<M> {
15    pub fn new() -> Self {
16        let (mbox, receiver) = MsgMailbox::mock();
17        Self { mbox, receiver }
18    }
19
20    pub fn new_bounded(channel_size: usize) -> Self {
21        let (mbox, receiver) = MsgMailbox::bounded_mock(channel_size);
22        Self { mbox, receiver }
23    }
24
25    pub fn take_messages(&mut self) -> Vec<M> {
26        self.receiver.try_iter().collect()
27    }
28}
29
30impl<M: Message> Default for ServiceMock<M> {
31    fn default() -> Self {
32        Self::new()
33    }
34}