1 //! Implementations of the [`Connection`] trait for various built-in types
2 // TODO: impl Connection for all `Read + Write` (blocked on specialization)
3 
4 #[cfg(feature = "alloc")]
5 mod boxed;
6 
7 #[cfg(feature = "std")]
8 mod tcpstream;
9 
10 #[cfg(all(feature = "std", unix))]
11 mod unixstream;
12 
13 use crate::conn::Connection;
14 use crate::conn::ConnectionExt;
15 
16 impl<E> Connection for &mut dyn Connection<Error = E> {
17     type Error = E;
18 
write(&mut self, byte: u8) -> Result<(), Self::Error>19     fn write(&mut self, byte: u8) -> Result<(), Self::Error> {
20         (**self).write(byte)
21     }
22 
write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error>23     fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
24         (**self).write_all(buf)
25     }
26 
flush(&mut self) -> Result<(), Self::Error>27     fn flush(&mut self) -> Result<(), Self::Error> {
28         (**self).flush()
29     }
30 
on_session_start(&mut self) -> Result<(), Self::Error>31     fn on_session_start(&mut self) -> Result<(), Self::Error> {
32         (**self).on_session_start()
33     }
34 }
35 
36 impl<E> Connection for &mut dyn ConnectionExt<Error = E> {
37     type Error = E;
38 
write(&mut self, byte: u8) -> Result<(), Self::Error>39     fn write(&mut self, byte: u8) -> Result<(), Self::Error> {
40         (**self).write(byte)
41     }
42 
write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error>43     fn write_all(&mut self, buf: &[u8]) -> Result<(), Self::Error> {
44         (**self).write_all(buf)
45     }
46 
flush(&mut self) -> Result<(), Self::Error>47     fn flush(&mut self) -> Result<(), Self::Error> {
48         (**self).flush()
49     }
50 
on_session_start(&mut self) -> Result<(), Self::Error>51     fn on_session_start(&mut self) -> Result<(), Self::Error> {
52         (**self).on_session_start()
53     }
54 }
55 
56 impl<E> ConnectionExt for &mut dyn ConnectionExt<Error = E> {
read(&mut self) -> Result<u8, Self::Error>57     fn read(&mut self) -> Result<u8, Self::Error> {
58         (**self).read()
59     }
60 
peek(&mut self) -> Result<Option<u8>, Self::Error>61     fn peek(&mut self) -> Result<Option<u8>, Self::Error> {
62         (**self).peek()
63     }
64 }
65