use serde_json::Value;
pub(crate) fn analyze_epoch_progression(
old_obj: &serde_json::Map<String, Value>,
new_obj: &serde_json::Map<String, Value>,
) -> Option<(String, String)> {
let old_epoch = extract_epoch_info(old_obj)?;
let new_epoch = extract_epoch_info(new_obj)?;
if new_epoch <= old_epoch {
return None; }
let epoch_diff = new_epoch - old_epoch;
let progression_rate = if epoch_diff == 1.0 {
"normal"
} else if epoch_diff < 1.0 {
"fractional"
} else {
"skipped_epochs"
};
let old_info = format!("epoch: {old_epoch}");
let new_info =
format!("epoch: {new_epoch}, progression: {progression_rate} ({epoch_diff:+.1})");
Some((old_info, new_info))
}
pub(crate) fn extract_epoch_info(obj: &serde_json::Map<String, Value>) -> Option<f64> {
if let Some(Value::Number(num)) = obj.get("epoch") {
return num.as_f64();
}
None
}