76
76
COMPACT_NULLABLE_TYPE_MAPS = {
77
77
"string" : "!CompactNullableString" ,
78
78
"bytes" : "!CompactNullableBytes" ,
79
- "records" : ..., # TODO, produce version >= 9
79
+ "records" : ..., # TODO, produce version >= 9
80
80
"array" : "!(CompactKaArray {})" ,
81
81
}
82
82
@@ -287,9 +287,11 @@ def format(self):
287
287
else :
288
288
data_type = f"data { self ._name } = { self ._cons } "
289
289
data_fields = "\n , " .join (
290
- f"{ f .name } :: { f .ver_ty } \n { format_field_doc (f .doc )} "
291
- if f .doc
292
- else f"{ f .name } :: { f .ver_ty } "
290
+ (
291
+ f"{ f .name } :: { f .ver_ty } \n { format_field_doc (f .doc )} "
292
+ if f .doc
293
+ else f"{ f .name } :: { f .ver_ty } "
294
+ )
293
295
for f in self .fields
294
296
)
295
297
data_fields = " { " + data_fields + "\n }"
@@ -316,9 +318,9 @@ def append_hs_datas(datas: List[HsData], data: HsData):
316
318
and data .fields == data_ .fields # noqa: W503
317
319
):
318
320
# An int mean use this fileds instead
319
- DATA_TYPE_RENAMES [
320
- f"{ data .name } V{ data .version } "
321
- ] = f" { data . name } V { data_ . version } "
321
+ DATA_TYPE_RENAMES [f" { data . name } V { data . version } " ] = (
322
+ f"{ data .name } V{ data_ .version } "
323
+ )
322
324
data .fields = data_ .version
323
325
same_found = True
324
326
datas .append (data )
@@ -639,30 +641,39 @@ def parse(msg, custom=False):
639
641
640
642
641
643
def convert_field_type (f , is_nullable = False , is_flexible = False ):
642
- if f .ka_type == "string" and is_nullable :
643
- return "!NullableString"
644
+ if f .ka_type == "string" :
645
+ if is_nullable and not is_flexible :
646
+ return "!NullableString"
647
+ if is_nullable and is_flexible :
648
+ return "!CompactNullableString"
649
+ if not is_nullable and is_flexible :
650
+ return "!CompactString"
644
651
return f .ty
645
652
646
653
647
- def _convert_field_array (f , ver , label , direction , is_flexible = False ):
654
+ def _convert_field_array (f , ver , label , direction , convert_flexible = False ):
648
655
convertCompact = (
649
656
"kaArrayToCompact" if direction == "To" else "kaArrayFromCompact"
650
657
)
651
658
if f .ka_type_arr_of in {* TYPE_MAPS .keys (), "TaggedFields" }:
652
- if is_flexible :
659
+ if convert_flexible :
653
660
return f"{ convertCompact } { label } .{ f .name } "
654
661
return label + "." + f .name
655
662
else :
656
663
converter = lower_fst (f .ka_type_arr_of ) + direction + "V" + str (ver )
657
- if is_flexible :
664
+ if convert_flexible :
658
665
return f"fmap { converter } ({ convertCompact } { label } .{ f .name } )"
659
666
return f"fmap { converter } { label } .{ f .name } "
660
667
661
668
662
669
def convert_field_to (f , ver , is_flexible , label ):
663
670
if f .ka_type == "array" :
664
671
return _convert_field_array (
665
- f , ver , label , "To" , is_flexible = is_flexible
672
+ f ,
673
+ ver ,
674
+ label ,
675
+ "To" ,
676
+ convert_flexible = is_flexible and f .ty != f .ver_ty ,
666
677
)
667
678
668
679
if f .ka_type in {* TYPE_MAPS .keys (), "TaggedFields" }:
@@ -677,7 +688,11 @@ def convert_field_from(src_fields, ver, dest, is_flexible, label):
677
688
if src is not None :
678
689
if src .ka_type == "array" :
679
690
return _convert_field_array (
680
- src , ver , label , "From" , is_flexible = is_flexible
691
+ src ,
692
+ ver ,
693
+ label ,
694
+ "From" ,
695
+ convert_flexible = is_flexible and src .ty != src .ver_ty ,
681
696
)
682
697
return label + "." + src .name
683
698
0 commit comments