1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
use crate::Frame;
use async_hal::delay::DelayMs;
use futures::{Sink, Stream};

pub mod reader;
pub use reader::Reader;

pub mod writer;
pub use writer::Writer;

pub trait Transport<E>: Sink<Frame> + Stream<Item = Result<Frame, E>> + Sized {
    fn reader(self) -> Reader<Self, E> {
        Reader::new(self)
    }

    fn writer<D>(self, delay: D) -> Writer<Self, E, D>
    where
        D: DelayMs + Unpin,
        D::Delay: From<u8>,
    {
        Writer::new(self, delay)
    }
}

impl<T, E> Transport<E> for T where T: Sink<Frame> + Stream<Item = Result<Frame, E>> {}