diff options
Diffstat (limited to 'src/json.rs')
| -rw-r--r-- | src/json.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/json.rs b/src/json.rs new file mode 100644 index 0000000..9515661 --- /dev/null +++ b/src/json.rs @@ -0,0 +1,10 @@ +use serde::{de, Deserialize, Deserializer}; +use serde_json::Value; + +pub fn number_from_string<'de, D: Deserializer<'de>>(deserializer: D) -> Result<f64, D::Error> { + Ok(match Value::deserialize(deserializer)? { + Value::String(s) => s.parse().map_err(de::Error::custom)?, + Value::Number(num) => num.as_f64().ok_or(de::Error::custom("Invalid number"))?, + _ => return Err(de::Error::custom("wrong type")), + }) +} |
