#[cfg(test)]
pub mod mock;
pub mod nusb;
#[cfg(feature = "virtual-device")]
pub mod virtual_device;
pub use self::nusb::{NusbTransport, UsbDeviceInfo};
use async_trait::async_trait;
use std::time::Duration;
#[async_trait]
pub trait Transport: Send + Sync {
async fn send_bulk(&self, data: &[u8]) -> Result<(), crate::Error>;
async fn receive_bulk(&self, max_size: usize) -> Result<Vec<u8>, crate::Error>;
async fn receive_interrupt(&self) -> Result<Vec<u8>, crate::Error>;
async fn cancel_transfer(
&self,
transaction_id: u32,
idle_timeout: Duration,
) -> Result<(), crate::Error>;
}