mod inventory;
mod io;
mod path;
mod privilege;
mod safety;
mod volume;
pub use inventory::DeviceInventory;
pub use io::{DeviceReader, DeviceWriter};
pub use path::DevicePathOps;
pub use privilege::{ElevationCapability, PrivilegeOps};
pub use safety::DeviceSafety;
pub use volume::VolumeOps;
use crate::devices::DeviceError;
pub trait Platform:
DeviceInventory + DevicePathOps + DeviceSafety + VolumeOps + PrivilegeOps
{
type Reader: DeviceReader + Send;
type BufferedReader: DeviceReader + Send;
type Writer: DeviceWriter + Send;
fn open_reader(path: &str) -> anyhow::Result<Self::Reader> {
Self::Reader::open(path)
}
fn open_clone_reader(path: &str) -> anyhow::Result<Self::BufferedReader> {
Self::BufferedReader::open(path)
}
fn open_verify_reader(path: &str) -> anyhow::Result<Self::BufferedReader> {
Self::BufferedReader::open(path)
}
fn open_writer(path: &str) -> anyhow::Result<Self::Writer> {
Self::Writer::open(path)
}
fn validate_for_io(path: &str) -> Result<(), DeviceError> {
Self::validate_whole_disk_path(path)?;
Self::refuse_system_disk(path)?;
Ok(())
}
fn validate_safe_for_io(path: &str) -> Result<(), DeviceError> {
Self::validate_for_io(path)?;
Self::refuse_if_busy(path)?;
Ok(())
}
}