use std::fmt::{Debug, Display};
use std::hash::{Hash, Hasher};
use crate::devices::UsbPrimitive;
pub trait ThorlabsDevice<const CH: usize>: Debug + Display + Send + Sync {
fn inner(&self) -> &UsbPrimitive<CH>;
fn serial_number(&self) -> &str {
self.inner().serial_number()
}
fn abort(&self);
}
impl<const CH: usize> Hash for dyn ThorlabsDevice<CH> {
fn hash<H: Hasher>(&self, state: &mut H) {
self.inner().serial_number().hash(state);
}
}
impl<const CH: usize> PartialEq for dyn ThorlabsDevice<CH> {
fn eq(&self, other: &Self) -> bool {
self.inner().serial_number() == other.inner().serial_number()
}
}
impl<const CH: usize> Eq for dyn ThorlabsDevice<CH> {}