From 1626b80315bba45cb3e65aa61f5c95b658825bf1 Mon Sep 17 00:00:00 2001 From: Raphael Taylor-Davies <1781103+tustvold@users.noreply.github.com> Date: Sat, 15 Jan 2022 18:49:09 +0000 Subject: [PATCH] Serialize i128 as JSON string (#1175) --- arrow/Cargo.toml | 2 +- arrow/src/datatypes/mod.rs | 4 ++-- arrow/src/datatypes/native.rs | 6 +++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/arrow/Cargo.toml b/arrow/Cargo.toml index 219a7d1392f6..1b2be2b35de8 100644 --- a/arrow/Cargo.toml +++ b/arrow/Cargo.toml @@ -39,7 +39,7 @@ path = "src/lib.rs" [dependencies] serde = { version = "1.0" } serde_derive = "1.0" -serde_json = { version = "1.0", features = ["preserve_order", "arbitrary_precision"] } +serde_json = { version = "1.0", features = ["preserve_order"] } indexmap = { version = "1.6", features = ["std"] } rand = { version = "0.8", optional = true } num = "0.4" diff --git a/arrow/src/datatypes/mod.rs b/arrow/src/datatypes/mod.rs index 12e06d556763..9864f79a3729 100644 --- a/arrow/src/datatypes/mod.rs +++ b/arrow/src/datatypes/mod.rs @@ -46,7 +46,7 @@ pub type SchemaRef = Arc; mod tests { use super::*; use crate::error::Result; - use serde_json::Value::{Bool, Number as VNumber}; + use serde_json::Value::{Bool, Number as VNumber, String as VString}; use serde_json::{Number, Value}; use std::{ collections::{BTreeMap, HashMap}, @@ -1175,7 +1175,7 @@ mod tests { assert_eq!(Some(VNumber(Number::from(1))), 1i16.into_json_value()); assert_eq!(Some(VNumber(Number::from(1))), 1i32.into_json_value()); assert_eq!(Some(VNumber(Number::from(1))), 1i64.into_json_value()); - assert_eq!(Some(VNumber(Number::from(1))), 1i128.into_json_value()); + assert_eq!(Some(VString("1".to_string())), 1i128.into_json_value()); assert_eq!(Some(VNumber(Number::from(1))), 1u8.into_json_value()); assert_eq!(Some(VNumber(Number::from(1))), 1u16.into_json_value()); assert_eq!(Some(VNumber(Number::from(1))), 1u32.into_json_value()); diff --git a/arrow/src/datatypes/native.rs b/arrow/src/datatypes/native.rs index 019a1f225bb2..2a8c99f0f89e 100644 --- a/arrow/src/datatypes/native.rs +++ b/arrow/src/datatypes/native.rs @@ -209,7 +209,11 @@ impl ArrowNativeType for i64 { impl JsonSerializable for i128 { fn into_json_value(self) -> Option { - Some(self.into()) + // Serialize as string to avoid issues with arbitrary_precision serde_json feature + // - https://github.com/serde-rs/json/issues/559 + // - https://github.com/serde-rs/json/issues/845 + // - https://github.com/serde-rs/json/issues/846 + Some(self.to_string().into()) } }