@@ -175,6 +175,9 @@ impl serde::Serialize for ArrowType {
175
175
arrow_type:: ArrowTypeEnum :: Decimal ( v) => {
176
176
struct_ser. serialize_field ( "DECIMAL" , v) ?;
177
177
}
178
+ arrow_type:: ArrowTypeEnum :: Decimal256 ( v) => {
179
+ struct_ser. serialize_field ( "DECIMAL256" , v) ?;
180
+ }
178
181
arrow_type:: ArrowTypeEnum :: List ( v) => {
179
182
struct_ser. serialize_field ( "LIST" , v) ?;
180
183
}
@@ -241,6 +244,7 @@ impl<'de> serde::Deserialize<'de> for ArrowType {
241
244
"TIME64" ,
242
245
"INTERVAL" ,
243
246
"DECIMAL" ,
247
+ "DECIMAL256" ,
244
248
"LIST" ,
245
249
"LARGE_LIST" ,
246
250
"LARGELIST" ,
@@ -282,6 +286,7 @@ impl<'de> serde::Deserialize<'de> for ArrowType {
282
286
Time64 ,
283
287
Interval ,
284
288
Decimal ,
289
+ Decimal256 ,
285
290
List ,
286
291
LargeList ,
287
292
FixedSizeList ,
@@ -338,6 +343,7 @@ impl<'de> serde::Deserialize<'de> for ArrowType {
338
343
"TIME64" => Ok ( GeneratedField :: Time64 ) ,
339
344
"INTERVAL" => Ok ( GeneratedField :: Interval ) ,
340
345
"DECIMAL" => Ok ( GeneratedField :: Decimal ) ,
346
+ "DECIMAL256" => Ok ( GeneratedField :: Decimal256 ) ,
341
347
"LIST" => Ok ( GeneratedField :: List ) ,
342
348
"LARGELIST" | "LARGE_LIST" => Ok ( GeneratedField :: LargeList ) ,
343
349
"FIXEDSIZELIST" | "FIXED_SIZE_LIST" => Ok ( GeneratedField :: FixedSizeList ) ,
@@ -556,6 +562,13 @@ impl<'de> serde::Deserialize<'de> for ArrowType {
556
562
return Err ( serde:: de:: Error :: duplicate_field ( "DECIMAL" ) ) ;
557
563
}
558
564
arrow_type_enum__ = map_. next_value :: < :: std:: option:: Option < _ > > ( ) ?. map ( arrow_type:: ArrowTypeEnum :: Decimal )
565
+ ;
566
+ }
567
+ GeneratedField :: Decimal256 => {
568
+ if arrow_type_enum__. is_some ( ) {
569
+ return Err ( serde:: de:: Error :: duplicate_field ( "DECIMAL256" ) ) ;
570
+ }
571
+ arrow_type_enum__ = map_. next_value :: < :: std:: option:: Option < _ > > ( ) ?. map ( arrow_type:: ArrowTypeEnum :: Decimal256 )
559
572
;
560
573
}
561
574
GeneratedField :: List => {
@@ -2849,6 +2862,118 @@ impl<'de> serde::Deserialize<'de> for Decimal256 {
2849
2862
deserializer. deserialize_struct ( "datafusion_common.Decimal256" , FIELDS , GeneratedVisitor )
2850
2863
}
2851
2864
}
2865
+ impl serde:: Serialize for Decimal256Type {
2866
+ #[ allow( deprecated) ]
2867
+ fn serialize < S > ( & self , serializer : S ) -> std:: result:: Result < S :: Ok , S :: Error >
2868
+ where
2869
+ S : serde:: Serializer ,
2870
+ {
2871
+ use serde:: ser:: SerializeStruct ;
2872
+ let mut len = 0 ;
2873
+ if self . precision != 0 {
2874
+ len += 1 ;
2875
+ }
2876
+ if self . scale != 0 {
2877
+ len += 1 ;
2878
+ }
2879
+ let mut struct_ser = serializer. serialize_struct ( "datafusion_common.Decimal256Type" , len) ?;
2880
+ if self . precision != 0 {
2881
+ struct_ser. serialize_field ( "precision" , & self . precision ) ?;
2882
+ }
2883
+ if self . scale != 0 {
2884
+ struct_ser. serialize_field ( "scale" , & self . scale ) ?;
2885
+ }
2886
+ struct_ser. end ( )
2887
+ }
2888
+ }
2889
+ impl < ' de > serde:: Deserialize < ' de > for Decimal256Type {
2890
+ #[ allow( deprecated) ]
2891
+ fn deserialize < D > ( deserializer : D ) -> std:: result:: Result < Self , D :: Error >
2892
+ where
2893
+ D : serde:: Deserializer < ' de > ,
2894
+ {
2895
+ const FIELDS : & [ & str ] = & [
2896
+ "precision" ,
2897
+ "scale" ,
2898
+ ] ;
2899
+
2900
+ #[ allow( clippy:: enum_variant_names) ]
2901
+ enum GeneratedField {
2902
+ Precision ,
2903
+ Scale ,
2904
+ }
2905
+ impl < ' de > serde:: Deserialize < ' de > for GeneratedField {
2906
+ fn deserialize < D > ( deserializer : D ) -> std:: result:: Result < GeneratedField , D :: Error >
2907
+ where
2908
+ D : serde:: Deserializer < ' de > ,
2909
+ {
2910
+ struct GeneratedVisitor ;
2911
+
2912
+ impl < ' de > serde:: de:: Visitor < ' de > for GeneratedVisitor {
2913
+ type Value = GeneratedField ;
2914
+
2915
+ fn expecting ( & self , formatter : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
2916
+ write ! ( formatter, "expected one of: {:?}" , & FIELDS )
2917
+ }
2918
+
2919
+ #[ allow( unused_variables) ]
2920
+ fn visit_str < E > ( self , value : & str ) -> std:: result:: Result < GeneratedField , E >
2921
+ where
2922
+ E : serde:: de:: Error ,
2923
+ {
2924
+ match value {
2925
+ "precision" => Ok ( GeneratedField :: Precision ) ,
2926
+ "scale" => Ok ( GeneratedField :: Scale ) ,
2927
+ _ => Err ( serde:: de:: Error :: unknown_field ( value, FIELDS ) ) ,
2928
+ }
2929
+ }
2930
+ }
2931
+ deserializer. deserialize_identifier ( GeneratedVisitor )
2932
+ }
2933
+ }
2934
+ struct GeneratedVisitor ;
2935
+ impl < ' de > serde:: de:: Visitor < ' de > for GeneratedVisitor {
2936
+ type Value = Decimal256Type ;
2937
+
2938
+ fn expecting ( & self , formatter : & mut std:: fmt:: Formatter < ' _ > ) -> std:: fmt:: Result {
2939
+ formatter. write_str ( "struct datafusion_common.Decimal256Type" )
2940
+ }
2941
+
2942
+ fn visit_map < V > ( self , mut map_ : V ) -> std:: result:: Result < Decimal256Type , V :: Error >
2943
+ where
2944
+ V : serde:: de:: MapAccess < ' de > ,
2945
+ {
2946
+ let mut precision__ = None ;
2947
+ let mut scale__ = None ;
2948
+ while let Some ( k) = map_. next_key ( ) ? {
2949
+ match k {
2950
+ GeneratedField :: Precision => {
2951
+ if precision__. is_some ( ) {
2952
+ return Err ( serde:: de:: Error :: duplicate_field ( "precision" ) ) ;
2953
+ }
2954
+ precision__ =
2955
+ Some ( map_. next_value :: < :: pbjson:: private:: NumberDeserialize < _ > > ( ) ?. 0 )
2956
+ ;
2957
+ }
2958
+ GeneratedField :: Scale => {
2959
+ if scale__. is_some ( ) {
2960
+ return Err ( serde:: de:: Error :: duplicate_field ( "scale" ) ) ;
2961
+ }
2962
+ scale__ =
2963
+ Some ( map_. next_value :: < :: pbjson:: private:: NumberDeserialize < _ > > ( ) ?. 0 )
2964
+ ;
2965
+ }
2966
+ }
2967
+ }
2968
+ Ok ( Decimal256Type {
2969
+ precision : precision__. unwrap_or_default ( ) ,
2970
+ scale : scale__. unwrap_or_default ( ) ,
2971
+ } )
2972
+ }
2973
+ }
2974
+ deserializer. deserialize_struct ( "datafusion_common.Decimal256Type" , FIELDS , GeneratedVisitor )
2975
+ }
2976
+ }
2852
2977
impl serde:: Serialize for DfField {
2853
2978
#[ allow( deprecated) ]
2854
2979
fn serialize < S > ( & self , serializer : S ) -> std:: result:: Result < S :: Ok , S :: Error >
0 commit comments