From 19968a34d77df07af084bbe87c7c16da1b632b36 Mon Sep 17 00:00:00 2001 From: SimonSchneider Date: Mon, 16 May 2022 18:01:16 +0200 Subject: [PATCH] generic float serializer --- src/io/json/write/serialize.rs | 35 +++++++++------------------------- 1 file changed, 9 insertions(+), 26 deletions(-) diff --git a/src/io/json/write/serialize.rs b/src/io/json/write/serialize.rs index 41c756586df..fb90c17ad0f 100644 --- a/src/io/json/write/serialize.rs +++ b/src/io/json/write/serialize.rs @@ -43,34 +43,17 @@ fn primitive_serializer<'a, T: NativeType + ToLexical>( )) } -fn f64_serializer<'a>( - array: &'a PrimitiveArray, -) -> Box + 'a + Send + Sync> { - Box::new(BufStreamingIterator::new( - array.iter(), - |x, buf| { - if let Some(x) = x { - if f64::is_nan(*x) { - buf.extend(b"null") - } else { - lexical_to_bytes_mut(*x, buf) - } - } else { - buf.extend(b"null") - } - }, - vec![], - )) -} - -fn f32_serializer<'a>( - array: &'a PrimitiveArray, -) -> Box + 'a + Send + Sync> { +fn float_serializer<'a, T>( + array: &'a PrimitiveArray, +) -> Box + 'a + Send + Sync> +where + T: num_traits::Float + NativeType + ToLexical, +{ Box::new(BufStreamingIterator::new( array.iter(), |x, buf| { if let Some(x) = x { - if f32::is_nan(*x) { + if T::is_nan(*x) { buf.extend(b"null") } else { lexical_to_bytes_mut(*x, buf) @@ -236,8 +219,8 @@ pub(crate) fn new_serializer<'a>( DataType::UInt16 => primitive_serializer::(array.as_any().downcast_ref().unwrap()), DataType::UInt32 => primitive_serializer::(array.as_any().downcast_ref().unwrap()), DataType::UInt64 => primitive_serializer::(array.as_any().downcast_ref().unwrap()), - DataType::Float32 => f32_serializer(array.as_any().downcast_ref().unwrap()), - DataType::Float64 => f64_serializer(array.as_any().downcast_ref().unwrap()), + DataType::Float32 => float_serializer::(array.as_any().downcast_ref().unwrap()), + DataType::Float64 => float_serializer::(array.as_any().downcast_ref().unwrap()), DataType::Utf8 => utf8_serializer::(array.as_any().downcast_ref().unwrap()), DataType::LargeUtf8 => utf8_serializer::(array.as_any().downcast_ref().unwrap()), DataType::Struct(_) => struct_serializer(array.as_any().downcast_ref().unwrap()),