use crate::Result;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct USBDevice {
pub vendor_id: String,
pub product_id: String,
pub vendor_name: String,
pub product_name: String,
pub device_class: String,
pub usb_version: String,
pub serial_number: Option<String>,
pub bus_number: u8,
pub device_address: u8,
pub port_path: Option<String>,
pub driver: Option<String>,
pub connected: bool,
}
impl USBDevice {
pub fn query_all() -> Result<Vec<Self>> {
Ok(vec![])
}
pub fn vendor_id(&self) -> &str {
&self.vendor_id
}
pub fn product_id(&self) -> &str {
&self.product_id
}
pub fn vendor_name(&self) -> &str {
&self.vendor_name
}
pub fn product_name(&self) -> &str {
&self.product_name
}
pub fn device_class(&self) -> &str {
&self.device_class
}
pub fn usb_version(&self) -> &str {
&self.usb_version
}
pub fn is_connected(&self) -> bool {
self.connected
}
pub fn is_storage_device(&self) -> bool {
self.device_class.to_lowercase().contains("mass storage")
|| self.device_class.to_lowercase().contains("storage")
}
pub fn is_input_device(&self) -> bool {
self.device_class.to_lowercase().contains("hid")
|| self.device_class.to_lowercase().contains("human interface")
|| self.device_class.to_lowercase().contains("input")
}
pub fn is_audio_device(&self) -> bool {
self.device_class.to_lowercase().contains("audio")
}
pub fn is_video_device(&self) -> bool {
self.device_class.to_lowercase().contains("video")
|| self.device_class.to_lowercase().contains("camera")
}
pub fn is_high_speed(&self) -> bool {
self.usb_version.contains("3.")
|| self.usb_version.contains("3")
&& !self.usb_version.contains("2.")
&& !self.usb_version.contains("1.")
}
}