use log::error;
use std::fmt::Display;
use vbox_raw::sys_lib as raw;
#[derive(Debug, Eq, PartialEq, Copy, Clone)]
pub enum MediumVariant {
Standard,
VmdkSplit2G,
VmdkRawDisk,
VmdkStreamOptimized,
VmdkESX,
VdiZeroExpand,
Fixed,
Diff,
Formatted,
NoCreateDir,
}
impl Into<u32> for MediumVariant {
fn into(self) -> u32 {
match self {
MediumVariant::Standard => raw::MediumVariant_MediumVariant_Standard,
MediumVariant::VmdkSplit2G => raw::MediumVariant_MediumVariant_VmdkSplit2G,
MediumVariant::VmdkRawDisk => raw::MediumVariant_MediumVariant_VmdkRawDisk,
MediumVariant::VmdkStreamOptimized => {
raw::MediumVariant_MediumVariant_VmdkStreamOptimized
}
MediumVariant::VmdkESX => raw::MediumVariant_MediumVariant_VmdkESX,
MediumVariant::VdiZeroExpand => raw::MediumVariant_MediumVariant_VdiZeroExpand,
MediumVariant::Fixed => raw::MediumVariant_MediumVariant_Fixed,
MediumVariant::Diff => raw::MediumVariant_MediumVariant_Diff,
MediumVariant::Formatted => raw::MediumVariant_MediumVariant_Formatted,
MediumVariant::NoCreateDir => raw::MediumVariant_MediumVariant_NoCreateDir,
}
}
}
impl From<u32> for MediumVariant {
fn from(value: u32) -> Self {
match value {
raw::MediumVariant_MediumVariant_Standard => MediumVariant::Standard,
raw::MediumVariant_MediumVariant_VmdkSplit2G => MediumVariant::VmdkSplit2G,
raw::MediumVariant_MediumVariant_VmdkRawDisk => MediumVariant::VmdkRawDisk,
raw::MediumVariant_MediumVariant_VmdkStreamOptimized => {
MediumVariant::VmdkStreamOptimized
}
raw::MediumVariant_MediumVariant_VmdkESX => MediumVariant::VmdkESX,
raw::MediumVariant_MediumVariant_VdiZeroExpand => MediumVariant::VdiZeroExpand,
raw::MediumVariant_MediumVariant_Fixed => MediumVariant::Fixed,
raw::MediumVariant_MediumVariant_Diff => MediumVariant::Diff,
raw::MediumVariant_MediumVariant_Formatted => MediumVariant::Formatted,
raw::MediumVariant_MediumVariant_NoCreateDir => MediumVariant::NoCreateDir,
_ => {
error!("MediumVariant::from. Unknown type: {}", value);
MediumVariant::Standard
}
}
}
}
impl Display for MediumVariant {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "{}", format!("{:?}", self))
}
}