summaryrefslogtreecommitdiffstats
path: root/src/json.rs
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-09-21 21:51:38 +0000
committerSanto Cariotti <santo@dcariotti.me>2022-09-21 21:51:38 +0000
commita30bcf0f0f32d6b1c822c631cf22fa9b13a5616a (patch)
tree487c2f515e76fc93e3a1846f88bb1024e01c2559 /src/json.rs
parenta3275b45ef2db23b10d8f430ec17886d89768389 (diff)
Deserialize float model values as number from string
Diffstat (limited to 'src/json.rs')
-rw-r--r--src/json.rs10
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")),
+ })
+}