fix: number serialization

This commit is contained in:
Stefan
2024-09-30 19:15:22 +02:00
parent f9dc2f1c99
commit 5341cac30e
+18 -2
View File
@@ -1,5 +1,7 @@
use crate::variable::Variable;
use serde::{ser, Serialize, Serializer};
use rust_decimal::prelude::ToPrimitive;
use serde::ser::SerializeMap;
use serde::{Serialize, Serializer};
impl Serialize for Variable {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
@@ -9,7 +11,21 @@ impl Serialize for Variable {
match self {
Variable::Null => serializer.serialize_unit(),
Variable::Bool(v) => serializer.serialize_bool(*v),
Variable::Number(v) => ser::Serialize::serialize(v, serializer),
Variable::Number(v) => {
if let Some(float) = v.to_f64() {
return serializer.serialize_f64(float);
}
if let Some(integer) = v.to_i128() {
return serializer.serialize_i128(integer);
}
let string_value = v.to_string();
let mut map = serializer.serialize_map(Some(1))?;
map.serialize_entry("$serde_json::private::Number", &string_value)?;
map.end()
}
Variable::String(v) => serializer.serialize_str(v),
Variable::Array(v) => {
let borrowed = v.borrow();