use crate::channel::{Receive, ReceiveFd, Transmit, TransmitFd};
use crate::error::CanError;
pub trait Driver {
type Channel: Transmit + Receive;
type Builder: ChannelBuilder<Channel = Self::Channel>;
type Error: CanError;
fn channel(&self, index: u32) -> Result<Self::Builder, Self::Error>;
}
pub trait ChannelBuilder: Sized {
type Channel;
type Error: CanError;
fn bitrate(self, bitrate: u32) -> Result<Self, Self::Error>;
fn data_bitrate(self, bitrate: u32) -> Result<Self, Self::Error>;
fn sample_point(self, sample_point: f32) -> Result<Self, Self::Error>;
fn connect(self) -> Result<Self::Channel, Self::Error>;
}
pub trait DriverFd: Driver
where
Self::Channel: TransmitFd + ReceiveFd,
{
}