pub mod cdrom;
pub mod file;
pub mod guid;
pub mod hd;
pub mod offset;
pub mod ramdisk;
pub mod vendor;
use crate::{Error, Head, Type};
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum Media {
HardDrive(hd::HardDrive),
CdRom(cdrom::CdRom),
Vendor(vendor::Vendor),
FilePath(file::FilePath),
MediaProtocol(guid::Guid),
PiwgFirmwareFile(guid::Guid),
PiwgFirmwareVolume(guid::Guid),
RelativeOffsetRange(offset::RelativeRange),
RamDisk(ramdisk::RamDisk),
}
impl TryFrom<Head<'_>> for Media {
type Error = Error;
fn try_from(head: Head<'_>) -> Result<Self, Self::Error> {
match head.subkind {
0x01 => TryFrom::try_from(head).map(Media::HardDrive),
0x02 => TryFrom::try_from(head).map(Media::CdRom),
0x03 => TryFrom::try_from(head).map(Media::Vendor),
0x04 => TryFrom::try_from(head).map(Media::FilePath),
0x05 => TryFrom::try_from(head).map(Media::MediaProtocol),
0x06 => TryFrom::try_from(head).map(Media::PiwgFirmwareFile),
0x07 => TryFrom::try_from(head).map(Media::PiwgFirmwareVolume),
0x08 => TryFrom::try_from(head).map(Media::RelativeOffsetRange),
0x09 => TryFrom::try_from(head).map(Media::RamDisk),
n => Err(Error::UnknownSubType(Type::Media, n)),
}
}
}