Skip to content

Commit

Permalink
fix
Browse files Browse the repository at this point in the history
  • Loading branch information
felipensp committed Jan 3, 2025
1 parent 8a681ba commit 7b44d66
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 2 deletions.
20 changes: 20 additions & 0 deletions vlib/json/tests/json_decode_struct_default_test.v
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import json

struct Bar {
b []int = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

struct Foo {
Bar
a []int = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

fn test_main() {
str := json.encode(Foo{})
assert json.decode(Foo, str)!.str() == 'Foo{
Bar: Bar{
b: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
a: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}'
}
3 changes: 1 addition & 2 deletions vlib/v/gen/c/json.v
Original file line number Diff line number Diff line change
Expand Up @@ -848,8 +848,7 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
if field.has_default_expr {
dec.writeln('\t} else {')
default_str := g.expr_string_opt(field.typ, field.default_expr)
lines := default_str.count('\n')
if lines > 1 {
if default_str.count(';\n') > 1 {
dec.writeln(default_str.all_before_last('\n'))
dec.writeln('\t\t${prefix}${op}${c_name(field.name)} = ${default_str.all_after_last('\n')};')
} else {
Expand Down
3 changes: 3 additions & 0 deletions vlib/x/json2/decoder.v
Original file line number Diff line number Diff line change
Expand Up @@ -202,6 +202,8 @@ fn decode_struct[T](_ T, res map[string]Any) !T {
}
} $else $if field.is_array {
arr := res[field.name]! as []Any
println(arr)
println(typ.$(field.name))
decode_array_item(mut typ.$(field.name), arr)
} $else $if field.is_struct {
typ.$(field.name) = decode_struct(typ.$(field.name), res[field.name]!.as_map())!
Expand Down Expand Up @@ -235,6 +237,7 @@ fn decode_struct[T](_ T, res map[string]Any) !T {
}

fn decode_array_item[T](mut field T, arr []Any) {
println('item> ${typeof[T]().name}')
// vfmt off
match typeof[T]().idx {
typeof[[]bool]().idx { field = arr.map(it.bool()) }
Expand Down

0 comments on commit 7b44d66

Please sign in to comment.