@@ -165,13 +165,20 @@ pub fn variant_to_json(json_buffer: &mut impl Write, variant: &Variant) -> Resul
165165 } ) ?;
166166 write ! ( json_buffer, "{}" , json_str) ?;
167167 }
168- Variant :: String ( s) | Variant :: ShortString ( s ) => {
168+ Variant :: String ( s) => {
169169 // Use serde_json to properly escape the string
170170 let json_str = serde_json:: to_string ( s) . map_err ( |e| {
171171 ArrowError :: InvalidArgumentError ( format ! ( "JSON encoding error: {}" , e) )
172172 } ) ?;
173173 write ! ( json_buffer, "{}" , json_str) ?;
174174 }
175+ Variant :: ShortString ( s) => {
176+ // Use serde_json to properly escape the string
177+ let json_str = serde_json:: to_string ( s. as_str ( ) ) . map_err ( |e| {
178+ ArrowError :: InvalidArgumentError ( format ! ( "JSON encoding error: {}" , e) )
179+ } ) ?;
180+ write ! ( json_buffer, "{}" , json_str) ?;
181+ }
175182 Variant :: Object ( obj) => {
176183 convert_object_to_json ( json_buffer, obj) ?;
177184 }
@@ -187,10 +194,9 @@ fn convert_object_to_json(buffer: &mut impl Write, obj: &VariantObject) -> Resul
187194 write ! ( buffer, "{{" ) ?;
188195
189196 // Get all fields from the object
190- let fields = obj. fields ( ) ?;
191197 let mut first = true ;
192198
193- for ( key, value) in fields {
199+ for ( key, value) in obj . iter ( ) {
194200 if !first {
195201 write ! ( buffer, "," ) ?;
196202 }
@@ -332,12 +338,12 @@ ArrowError::InvalidArgumentError("Invalid decimal value".to_string())
332338 Variant :: TimestampMicros ( ts) => Ok ( Value :: String ( ts. to_rfc3339 ( ) ) ) ,
333339 Variant :: TimestampNtzMicros ( ts) => Ok ( Value :: String ( format_timestamp_ntz_string ( ts) ) ) ,
334340 Variant :: Binary ( bytes) => Ok ( Value :: String ( format_binary_base64 ( bytes) ) ) ,
335- Variant :: String ( s) | Variant :: ShortString ( s) => Ok ( Value :: String ( s. to_string ( ) ) ) ,
341+ Variant :: String ( s) => Ok ( Value :: String ( s. to_string ( ) ) ) ,
342+ Variant :: ShortString ( s) => Ok ( Value :: String ( s. to_string ( ) ) ) ,
336343 Variant :: Object ( obj) => {
337344 let mut map = serde_json:: Map :: new ( ) ;
338- let fields = obj. fields ( ) ?;
339345
340- for ( key, value) in fields {
346+ for ( key, value) in obj . iter ( ) {
341347 let json_value = variant_to_json_value ( & value) ?;
342348 map. insert ( key. to_string ( ) , json_value) ;
343349 }
@@ -659,7 +665,9 @@ mod tests {
659665
660666 #[ test]
661667 fn test_short_string_to_json ( ) -> Result < ( ) , ArrowError > {
662- let variant = Variant :: ShortString ( "short" ) ;
668+ use crate :: variant:: ShortString ;
669+ let short_string = ShortString :: try_new ( "short" ) ?;
670+ let variant = Variant :: ShortString ( short_string) ;
663671 let json = variant_to_json_string ( & variant) ?;
664672 assert_eq ! ( json, "\" short\" " ) ;
665673
@@ -696,6 +704,7 @@ mod tests {
696704
697705 #[ test]
698706 fn test_comprehensive_type_coverage ( ) -> Result < ( ) , ArrowError > {
707+ use crate :: variant:: ShortString ;
699708 // Test all supported types to ensure no compilation errors
700709 let test_variants = vec ! [
701710 Variant :: Null ,
@@ -728,7 +737,7 @@ mod tests {
728737 Variant :: TimestampNtzMicros ( DateTime :: from_timestamp( 0 , 0 ) . unwrap( ) . naive_utc( ) ) ,
729738 Variant :: Binary ( b"test" ) ,
730739 Variant :: String ( "test" ) ,
731- Variant :: ShortString ( "test" ) ,
740+ Variant :: ShortString ( ShortString :: try_new ( "test" ) ? ) ,
732741 ] ;
733742
734743 for variant in test_variants {
0 commit comments