@@ -648,11 +648,18 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
648
648
'val'
649
649
}
650
650
is_option := field.typ.has_flag (.option)
651
+ indent := if is_option { '\t\t ' } else { '\t ' }
651
652
if is_option {
652
653
enc.writeln ('\t if (val${op}${c_name(field.name)} .state != 2) {' )
653
654
}
654
655
if is_omit_empty {
655
- enc.writeln ('\t if (val${op}${c_name(field.name)} != ${g.type_default(field.typ)} )' )
656
+ if field.typ.has_flag (.option) {
657
+ enc.writeln ('${indent} if (val${op}${c_name(field.name)} .state != 2)' )
658
+ } else if field.typ == ast.string_type {
659
+ enc.writeln ('${indent} if (val${op}${c_name(field.name)} .len != 0)' )
660
+ } else {
661
+ enc.writeln ('${indent} if (val${op}${c_name(field.name)} != ${g.type_default(field.typ)} )' )
662
+ }
656
663
}
657
664
if ! is_js_prim (field_type) {
658
665
if field_sym.kind == .alias {
@@ -663,44 +670,44 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
663
670
if field_sym.kind == .enum_ {
664
671
if g.is_enum_as_int (field_sym) {
665
672
if field.typ.has_flag (.option) {
666
- enc.writeln ('\t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(*${prefix_enc}${op}${c_name(field.name)} .data));\n ' )
673
+ enc.writeln ('${indent} \t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(*${prefix_enc}${op}${c_name(field.name)} .data));\n ' )
667
674
} else {
668
- enc.writeln ('\t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(${prefix_enc}${op}${c_name(field.name)} ));\n ' )
675
+ enc.writeln ('${indent} \t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(${prefix_enc}${op}${c_name(field.name)} ));\n ' )
669
676
}
670
677
} else {
671
678
if field.typ.has_flag (.option) {
672
- enc.writeln ('\t {' )
673
- enc.writeln ('\t\t cJSON *enum_val;' )
679
+ enc.writeln ('${indent} \t {' )
680
+ enc.writeln ('${indent} \t\t cJSON *enum_val;' )
674
681
g.gen_enum_to_str (field.typ, field_sym, '*(${g.base_type(field.typ)} *)${prefix_enc}${op}${c_name(field.name)} .data' ,
675
- 'enum_val' , '\t\t ' , mut enc)
676
- enc.writeln ('\t\t cJSON_AddItemToObject(o, "${name} ", enum_val);' )
677
- enc.writeln ('\t }' )
682
+ 'enum_val' , '${indent} \t\t ' , mut enc)
683
+ enc.writeln ('${indent} \t\t cJSON_AddItemToObject(o, "${name} ", enum_val);' )
684
+ enc.writeln ('${indent} \t }' )
678
685
} else {
679
- enc.writeln ('\t {' )
680
- enc.writeln ('\t\t cJSON *enum_val;' )
686
+ enc.writeln ('${indent} \t {' )
687
+ enc.writeln ('${indent} \t\t cJSON *enum_val;' )
681
688
g.gen_enum_to_str (field.typ, field_sym, '${prefix_enc}${op}${c_name(field.name)} ' ,
682
- 'enum_val' , '\t\t ' , mut enc)
683
- enc.writeln ('\t\t cJSON_AddItemToObject(o, "${name} ", enum_val);' )
684
- enc.writeln ('\t }' )
689
+ 'enum_val' , '${indent} \t\t ' , mut enc)
690
+ enc.writeln ('${indent} \t\t cJSON_AddItemToObject(o, "${name} ", enum_val);' )
691
+ enc.writeln ('${indent} \t }' )
685
692
}
686
693
}
687
694
} else {
688
695
if field_sym.name == 'time.Time' {
689
696
// time struct requires special treatment
690
697
// it has to be encoded as a unix timestamp number
691
- enc.writeln ('\t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(${prefix_enc}${op}${c_name(field.name)} ._v_unix));' )
698
+ enc.writeln ('${indent} \t cJSON_AddItemToObject(o, "${name} ", json__encode_u64(${prefix_enc}${op}${c_name(field.name)} ._v_unix));' )
692
699
} else {
693
700
if ! field.typ.is_real_pointer () {
694
- enc.writeln ('\t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${prefix_enc}${op}${c_name(field.name)} )); /*A*/' )
701
+ enc.writeln ('${indent} \t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${prefix_enc}${op}${c_name(field.name)} )); /*A*/' )
695
702
} else {
696
703
arg_prefix := if field.typ.is_ptr () { '' } else { '*' }
697
704
sptr_value := '${prefix_enc}${op}${c_name(field.name)} '
698
705
if ! field.typ.has_flag (.option) {
699
- enc.writeln ('\t if (${sptr_value} != 0) {' )
700
- enc.writeln ('\t\t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${arg_prefix}${sptr_value} ));' )
701
- enc.writeln ('\t }\n ' )
706
+ enc.writeln ('${indent} \t if (${sptr_value} != 0) {' )
707
+ enc.writeln ('${indent} \t\t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${arg_prefix}${sptr_value} ));' )
708
+ enc.writeln ('${indent} \t }\n ' )
702
709
} else {
703
- enc.writeln ('\t\t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${arg_prefix}${sptr_value} ));' )
710
+ enc.writeln ('${indent} \t\t cJSON_AddItemToObject(o, "${name} ", ${enc_name} (${arg_prefix}${sptr_value} ));' )
704
711
}
705
712
}
706
713
}
0 commit comments