use std::collections::BTreeMap;
use chronix_core::FieldValue;
pub(crate) fn extract_numeric_value(
fields: &BTreeMap<String, FieldValue>,
field_name: Option<&str>,
) -> Option<f64> {
let v = if let Some(name) = field_name {
fields.get(name).and_then(field_to_f64)
} else {
fields.values().find_map(field_to_f64)
};
v.filter(|v| v.is_finite())
}
pub(crate) fn field_to_f64(fv: &FieldValue) -> Option<f64> {
match fv {
FieldValue::F64(v) => Some(*v),
FieldValue::I64(v) => Some(*v as f64),
FieldValue::U64(v) => Some(*v as f64),
_ => None,
}
}
pub(crate) fn compute_tags_key(tags: &BTreeMap<String, String>) -> String {
use std::fmt::Write;
let mut key = String::new();
for (k, v) in tags {
let _ = write!(key, "{k}={v},");
}
key
}