From 286350aa9ba3ce8950f92366f96921c7c1d36577 Mon Sep 17 00:00:00 2001 From: yuyi Date: Mon, 9 Jan 2023 21:33:08 +0800 Subject: [PATCH] cgen: fix `json` encoding of structs with option fields (skip the fields with a value of `none`) (#16916) --- .../json_encode_struct_with_option_field_test.v | 17 +++++++++++++---- vlib/v/gen/c/json.v | 2 +- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/vlib/json/json_encode_struct_with_option_field_test.v b/vlib/json/json_encode_struct_with_option_field_test.v index 4edeb15e3..e4567c60d 100644 --- a/vlib/json/json_encode_struct_with_option_field_test.v +++ b/vlib/json/json_encode_struct_with_option_field_test.v @@ -1,4 +1,5 @@ import json +import x.json2 struct Foo { name string @@ -11,10 +12,18 @@ fn test_json_encode_struct_with_option_field() { } ret1 := json.encode(f1) println(ret1) - assert ret1 == '{"name":"hello","num":null}' + assert ret1 == '{"name":"hello"}' - f2 := Foo{'hello', 22} - ret2 := json.encode(f2) + ret2 := json2.encode(f1) println(ret2) - assert ret2 == '{"name":"hello","num":22}' + assert ret2 == '{"name":"hello"}' + + f2 := Foo{'hello', 22} + ret3 := json.encode(f2) + println(ret3) + assert ret3 == '{"name":"hello","num":22}' + + ret4 := json2.encode(f2) + println(ret4) + assert ret4 == '{"name":"hello","num":22}' } diff --git a/vlib/v/gen/c/json.v b/vlib/v/gen/c/json.v index dcbd0d345..5a97874d2 100644 --- a/vlib/v/gen/c/json.v +++ b/vlib/v/gen/c/json.v @@ -170,7 +170,7 @@ ${enc_fn_dec} { fn (mut g Gen) gen_option_enc_dec(typ ast.Type, mut enc strings.Builder, mut dec strings.Builder) { enc.writeln('\tif (val.state == 2) {') - enc.writeln('\t\treturn cJSON_CreateNull();') + enc.writeln('\t\treturn NULL;') enc.writeln('\t}') type_str := g.typ(typ.clear_flag(.option)) encode_name := js_enc_name(type_str) -- 2.30.2