use std::path::PathBuf;
use std::time::Duration;
#[derive(Debug, Clone)]
pub struct VirtualDeviceConfig {
pub manufacturer: String,
pub model: String,
pub serial: String,
pub storages: Vec<VirtualStorageConfig>,
pub supports_rename: bool,
pub supports_partial_object_64: bool,
pub supports_partial_object: bool,
pub supports_object_prop_list: bool,
pub prop_list_declined_properties: Vec<crate::ptp::ObjectPropertyCode>,
pub event_poll_interval: Duration,
pub watch_backing_dirs: bool,
pub undescribable_objects: Vec<String>,
pub utc_offset: crate::mtp::UtcOffset,
pub dates_include_offset: bool,
}
impl Default for VirtualDeviceConfig {
fn default() -> Self {
Self {
manufacturer: "mtp-rs".into(),
model: "Virtual Device".into(),
serial: "virtual-0001".into(),
storages: Vec::new(),
supports_rename: true,
supports_partial_object_64: true,
supports_partial_object: true,
supports_object_prop_list: true,
prop_list_declined_properties: Vec::new(),
event_poll_interval: Duration::from_millis(50),
watch_backing_dirs: true,
undescribable_objects: Vec::new(),
utc_offset: crate::mtp::UtcOffset::UTC,
dates_include_offset: false,
}
}
}
#[derive(Debug, Clone)]
pub struct VirtualStorageConfig {
pub description: String,
pub capacity: u64,
pub backing_dir: PathBuf,
pub read_only: bool,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn default_config_is_complete_except_storages() {
let config = VirtualDeviceConfig::default();
assert!(!config.manufacturer.is_empty());
assert!(!config.model.is_empty());
assert!(!config.serial.is_empty());
assert!(config.storages.is_empty());
assert!(config.supports_rename);
assert!(config.supports_partial_object_64);
assert!(config.supports_object_prop_list);
assert_eq!(config.event_poll_interval, Duration::from_millis(50));
assert!(config.watch_backing_dirs);
}
}