mountain_mqtt/
embedded_io_async.rs1use embedded_io::ReadReady;
2use embedded_io_async::{Read, Write};
3
4use crate::{
5 error::{PacketReadError, PacketWriteError},
6 packet_client::Connection,
7};
8
9pub struct ConnectionEmbedded<T>
14where
15 T: Read + Write + ReadReady,
16{
17 inner: T,
18}
19
20impl<T> ConnectionEmbedded<T>
21where
22 T: Read + Write + ReadReady,
23{
24 pub fn new(inner: T) -> Self {
26 ConnectionEmbedded { inner }
27 }
28
29 pub fn into_inner(self) -> T {
31 self.inner
32 }
33
34 pub fn inner(&self) -> &T {
36 &self.inner
37 }
38
39 pub fn inner_mut(&mut self) -> &mut T {
41 &mut self.inner
42 }
43}
44
45impl<T> Connection for ConnectionEmbedded<T>
46where
47 T: Read + Write + ReadReady,
48{
49 async fn send(&mut self, buf: &[u8]) -> Result<(), PacketWriteError> {
50 self.inner
51 .write_all(buf)
52 .await
53 .map_err(|_| PacketWriteError::ConnectionSend)?;
54 self.inner
55 .flush()
56 .await
57 .map_err(|_| PacketWriteError::ConnectionSend)
58 }
59
60 async fn receive(&mut self, buf: &mut [u8]) -> Result<(), PacketReadError> {
61 self.inner
62 .read_exact(buf)
63 .await
64 .map_err(|_| PacketReadError::ConnectionReceive)
65 }
66
67 async fn receive_if_ready(&mut self, buf: &mut [u8]) -> Result<bool, PacketReadError> {
68 if self
69 .inner
70 .read_ready()
71 .map_err(|_| PacketReadError::ConnectionReceive)?
72 {
73 self.receive(buf).await?;
74 Ok(true)
75 } else {
76 Ok(false)
77 }
78 }
79}