//! A filesystem-backed virtual MTP device, for testing without hardware. **Exempt from SemVer.**
//!
//! Needs the `virtual-device` feature. This is test support: the config fields and the hooks here
//! (fault injection, watcher control, stale-handle simulation) can change in any release, so treat
//! them like your test fixtures and expect to adjust when you bump `mtp-rs`.
//!
//! Open a device directly with [`MtpDeviceBuilder::open_virtual`](crate::MtpDeviceBuilder::open_virtual),
//! or call [`register_virtual_device`] so that [`MtpDevice::list_devices`](crate::MtpDevice::list_devices)
//! and the `open_by_*` methods find it like a plugged-in device.
//!
//! Build a config by stating the fields you care about and spreading the rest:
//!
//! ```rust,no_run
//! use mtp_rs::virtual_device::{VirtualDeviceConfig, VirtualStorageConfig};
//! use std::path::PathBuf;
//!
//! let config = VirtualDeviceConfig {
//! storages: vec![VirtualStorageConfig {
//! description: "Internal Storage".into(),
//! capacity: 1024 * 1024,
//! backing_dir: PathBuf::from("/tmp/mtp-test"),
//! read_only: false,
//! }],
//! ..Default::default()
//! };
//! ```
pub use crate;
pub use crate;
pub use crate;