liblitho 0.2.0

cli tool to flash/clone the images to storage devices
Documentation
//! Platform contracts implemented by Linux, Windows, and macOS modules.

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;

/// Umbrella marker: inventory + path + safety + volume + privilege for one OS.
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)
    }

    /// Path validation + system-disk refusal (mount state checked separately).
    fn validate_for_io(path: &str) -> Result<(), DeviceError> {
        Self::validate_whole_disk_path(path)?;
        Self::refuse_system_disk(path)?;
        Ok(())
    }

    /// Path + system disk + not busy.
    fn validate_safe_for_io(path: &str) -> Result<(), DeviceError> {
        Self::validate_for_io(path)?;
        Self::refuse_if_busy(path)?;
        Ok(())
    }
}