use serde_json::{Number, Value};
pub fn normalize_numbers(value: Value, decimals: u32) -> Value {
match value {
Value::Number(n) => {
if let Some(f) = n.as_f64() {
let factor = 10f64.powi(decimals as i32);
let rounded = (f * factor).round() / factor;
Value::Number(Number::from_f64(rounded).unwrap())
} else {
Value::Number(n)
}
}
Value::Array(arr) => Value::Array(
arr.into_iter()
.map(|v| normalize_numbers(v, decimals))
.collect(),
),
Value::Object(map) => Value::Object(
map.into_iter()
.map(|(k, v)| (k, normalize_numbers(v, decimals)))
.collect(),
),
other => other,
}
}