use std::collections::VecDeque;
use crate::error::Result;
use crate::transport::Transmit;
#[derive(Debug, Default)]
pub struct MockTransport {
responses: VecDeque<Vec<u8>>,
pub sent: Vec<Vec<u8>>,
}
impl MockTransport {
pub fn new(responses: impl IntoIterator<Item = Vec<u8>>) -> Self {
MockTransport {
responses: responses.into_iter().collect(),
sent: Vec::new(),
}
}
pub fn push(&mut self, response: Vec<u8>) {
self.responses.push_back(response);
}
pub fn is_drained(&self) -> bool {
self.responses.is_empty()
}
}
impl Transmit for MockTransport {
fn transmit(&mut self, command: &[u8]) -> Result<Vec<u8>> {
self.sent.push(command.to_vec());
Ok(self
.responses
.pop_front()
.unwrap_or_else(|| vec![0x6F, 0x00]))
}
}