From 5341cac30e4f47e553efabc0699f412429c3ba2c Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 30 Sep 2024 19:15:22 +0200 Subject: [PATCH] fix: number serialization --- core/expression/src/variable/ser.rs | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/core/expression/src/variable/ser.rs b/core/expression/src/variable/ser.rs index 4f726754..bb6284f1 100644 --- a/core/expression/src/variable/ser.rs +++ b/core/expression/src/variable/ser.rs @@ -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(&self, serializer: S) -> Result @@ -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();