async_hal/serial/
mod.rs

1use crate::io;
2use futures::{Sink, Stream};
3
4#[cfg(feature = "nb")]
5mod reader;
6#[cfg(feature = "nb")]
7pub use reader::Reader;
8
9#[cfg(feature = "nb")]
10mod writer;
11#[cfg(feature = "nb")]
12pub use writer::Writer;
13
14pub trait Serial: SerialRead + SerialWrite {}
15
16impl<T> Serial for T where T: ?Sized + SerialRead + SerialWrite {}
17
18pub trait SerialRead: Stream<Item = Result<u8, Self::Error>> + serial_read::Sealed {
19    type Error;
20
21    fn into_reader(self) -> io::Reader<Self>
22    where
23        Self: Sized + Unpin,
24    {
25        io::reader(self)
26    }
27}
28
29impl<T, E> SerialRead for T
30where
31    T: ?Sized + Stream<Item = Result<u8, E>>,
32{
33    type Error = E;
34}
35
36pub trait SerialWrite: Sink<u8> + serial_write::Sealed {
37    fn into_writer(self) -> io::Writer<Self>
38    where
39        Self: Sized + Unpin,
40    {
41        io::writer(self)
42    }
43}
44
45impl<T> SerialWrite for T where T: ?Sized + Sink<u8> {}
46
47mod serial_read {
48    use super::Stream;
49
50    pub trait Sealed {}
51
52    impl<T, E> Sealed for T where T: ?Sized + Stream<Item = Result<u8, E>> {}
53}
54
55mod serial_write {
56    use super::Sink;
57
58    pub trait Sealed {}
59
60    impl<T> Sealed for T where T: ?Sized + Sink<u8> {}
61}