use std::collections::BTreeMap;
#[derive(Debug, Clone, PartialEq)]
pub enum FieldValue {
Bool(bool),
I64(i64),
U64(u64),
F64(f64),
Str(String),
}
#[derive(Debug, Clone)]
pub struct TraceEvent {
pub seq: u64,
pub time_ms: u64,
pub source: String,
pub target: String,
pub level: tracing::Level,
pub name: String,
pub fields: BTreeMap<String, FieldValue>,
}
impl TraceEvent {
#[must_use]
pub fn u64(&self, key: &str) -> Option<u64> {
match self.fields.get(key)? {
FieldValue::U64(v) => Some(*v),
FieldValue::I64(v) => u64::try_from(*v).ok(),
_ => None,
}
}
#[must_use]
pub fn i64(&self, key: &str) -> Option<i64> {
match self.fields.get(key)? {
FieldValue::I64(v) => Some(*v),
FieldValue::U64(v) => i64::try_from(*v).ok(),
_ => None,
}
}
#[must_use]
pub fn f64(&self, key: &str) -> Option<f64> {
match self.fields.get(key)? {
FieldValue::F64(v) => Some(*v),
_ => None,
}
}
#[must_use]
pub fn bool(&self, key: &str) -> Option<bool> {
match self.fields.get(key)? {
FieldValue::Bool(v) => Some(*v),
_ => None,
}
}
#[must_use]
pub fn str(&self, key: &str) -> Option<&str> {
match self.fields.get(key)? {
FieldValue::Str(v) => Some(v),
_ => None,
}
}
}