#[derive(Clone, Debug, PartialEq)]
pub enum PrimitiveData {
Null,
Bool(bool),
Unsigned(u64),
Signed(i64),
Float(f64),
String(String),
Bytes(Vec<u8>),
Enum(&'static str),
Any(prost_types::Any),
}
fn hexdump(f: &mut std::fmt::Formatter<'_>, x: &[u8]) -> std::fmt::Result {
for (i, b) in x.iter().enumerate() {
if i > 0 {
write!(f, " ")?;
}
write!(f, "{:02X}", b)?;
}
Ok(())
}
impl std::fmt::Display for PrimitiveData {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
match self {
PrimitiveData::Null => write!(f, "null"),
PrimitiveData::Bool(true) => write!(f, "true"),
PrimitiveData::Bool(false) => write!(f, "false"),
PrimitiveData::Unsigned(x) => write!(f, "{x}"),
PrimitiveData::Signed(x) => write!(f, "{x}"),
PrimitiveData::Float(x) => write!(f, "{x}"),
PrimitiveData::String(x) => write!(f, "{x:?}"),
PrimitiveData::Bytes(x) => hexdump(f, x),
PrimitiveData::Enum(x) => write!(f, "{x}"),
PrimitiveData::Any(x) => {
write!(f, "{}(", x.type_url)?;
hexdump(f, &x.value)?;
write!(f, ")")
}
}
}
}