serial_settings/
interface.rs1pub struct BestEffortInterface<T>(T);
6
7impl<T> BestEffortInterface<T>
8where
9 T: embedded_io::Write
10 + embedded_io::WriteReady
11 + embedded_io::Read
12 + embedded_io::ReadReady,
13{
14 pub fn new(interface: T) -> Self {
17 Self(interface)
18 }
19
20 pub fn inner(&self) -> &T {
22 &self.0
23 }
24
25 pub fn inner_mut(&mut self) -> &mut T {
27 &mut self.0
28 }
29}
30
31impl<T> embedded_io::Write for BestEffortInterface<T>
32where
33 T: embedded_io::Write + embedded_io::WriteReady,
34{
35 fn write(&mut self, buf: &[u8]) -> Result<usize, T::Error> {
36 if let Ok(true) = self.0.write_ready() {
37 self.0.write(buf)
38 } else {
39 Ok(buf.len()) }
41 }
42
43 fn flush(&mut self) -> Result<(), Self::Error> {
44 Ok(())
45 }
46}
47
48impl<T> embedded_io::ErrorType for BestEffortInterface<T>
49where
50 T: embedded_io::ErrorType,
51{
52 type Error = <T as embedded_io::ErrorType>::Error;
53}
54
55impl<T> embedded_io::Read for BestEffortInterface<T>
56where
57 T: embedded_io::Read,
58{
59 fn read(&mut self, buf: &mut [u8]) -> Result<usize, Self::Error> {
60 self.0.read(buf)
61 }
62}
63
64impl<T> embedded_io::ReadReady for BestEffortInterface<T>
65where
66 T: embedded_io::ReadReady,
67{
68 fn read_ready(&mut self) -> Result<bool, Self::Error> {
69 self.0.read_ready()
70 }
71}