use crate::enums::*;
use crate::types::FromRegValue;
use std::borrow::Cow;
use std::fmt;
#[derive(PartialEq)]
pub struct RegValue<'a> {
pub bytes: Cow<'a, [u8]>,
pub vtype: RegType,
}
macro_rules! format_reg_value {
($e:expr => $t:ident) => {
match $t::from_reg_value($e) {
Ok(val) => format!("{}", val),
Err(_) => return Err(fmt::Error),
}
};
}
impl fmt::Display for RegValue<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let f_val = match self.vtype {
REG_SZ | REG_EXPAND_SZ | REG_MULTI_SZ => format_reg_value!(self => String),
REG_DWORD => format_reg_value!(self => u32),
REG_QWORD => format_reg_value!(self => u64),
_ => format!("{:?}", self.bytes), };
write!(f, "{}", f_val)
}
}
impl fmt::Debug for RegValue<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "RegValue({:?}: {})", self.vtype, self)
}
}