use serde::{de, Deserialize, Deserializer}; use serde_json::Value; pub fn number_from_string<'de, D: Deserializer<'de>>(deserializer: D) -> Result { Ok(match Value::deserialize(deserializer)? { Value::String(s) => s.parse().map_err(de::Error::custom)?, Value::Number(num) => num .as_f64() .ok_or_else(|| de::Error::custom("Invalid number"))?, _ => return Err(de::Error::custom("wrong type")), }) }