use crate::error::Error;
use std::pin::Pin;
use stream_cancel::Valved;
use tokio::sync::mpsc::Sender;
use tokio_stream::Stream;
#[async_trait::async_trait]
pub trait IsoTp {
type Frame: Clone + Send + 'static;
fn transmitter(&self) -> Sender<Self::Frame>;
fn shutdown(&mut self);
async fn frame_stream(
&self,
) -> Result<Valved<Pin<Box<dyn Stream<Item = Self::Frame> + Send>>>, Error>;
async fn start(&mut self, interval_us: u64);
async fn stop(&mut self);
async fn wait_data(&self, timeout: u64) -> Result<bytes::Bytes, Error>;
}