#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[derive(Serialize, Deserialize)]
pub struct VirtualDeviceName<V: DeviceDriverName>
{
virtualDeviceDriverName: V,
index: u5,
}
impl<V: DeviceDriverName> DeviceName for VirtualDeviceName<V>
{
#[inline(always)]
fn to_string(&self) -> String
{
format!("{}{}", self.virtualDeviceDriverName.value().to_owned(), self.indexToBase32LowerCase())
}
}
impl<V: DeviceDriverName> VirtualDeviceName<V>
{
pub const MaximumIndex: u8 = 32;
#[inline(always)]
pub fn new(virtualDeviceDriverName: V, index: u5) -> Self
{
assert!(index < Self::MaximumIndex, "index '{}' can not equal or exceed MaximumIndex '{}'", index, Self::MaximumIndex);
VirtualDeviceName
{
virtualDeviceDriverName: virtualDeviceDriverName,
index: index,
}
}
#[inline(always)]
pub fn isNotBackedByDriverName(&self, virtualDeviceDriverName: V) -> bool
{
self.virtualDeviceDriverName != virtualDeviceDriverName
}
#[inline(always)]
fn indexToBase32LowerCase(&self) -> char
{
let index = self.index;
match index
{
0...9 => (48 + index) as char,
10...31 => (97 + index - 10) as char,
_ => panic!("index can not be {} or greater, but it was: '{}", Self::MaximumIndex, index),
}
}
}