blob: 7143dbd582ad3aec48b85617d1e55ce26842fdd3 [file] [log] [blame]
// Copyright 2023, Igor Shaula
// Licensed under the MIT License <LICENSE or
// http://opensource.org/licenses/MIT>. This file
// may not be copied, modified, or distributed
// except according to those terms.
use crate::enums::*;
use crate::types::FromRegValue;
use std::fmt;
/// Raw registry value
#[derive(PartialEq)]
pub struct RegValue {
pub bytes: Vec<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), //TODO: implement more types
};
write!(f, "{}", f_val)
}
}
impl fmt::Debug for RegValue {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "RegValue({:?}: {})", self.vtype, self)
}
}