mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 15:48:51 +00:00
encoding/cbor: fix skipping of ignored/missing fields in struct unmarshal
This commit is contained in:
@@ -664,6 +664,8 @@ _unmarshal_map :: proc(d: Decoder, v: any, ti: ^reflect.Type_Info, hdr: Header,
|
|||||||
|
|
||||||
// Skips unused map entries.
|
// Skips unused map entries.
|
||||||
if use_field_idx < 0 {
|
if use_field_idx < 0 {
|
||||||
|
val := err_conv(_decode_from_decoder(d, allocator=context.temp_allocator)) or_return
|
||||||
|
destroy(val, context.temp_allocator)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -392,6 +392,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
|
|||||||
bar: struct {
|
bar: struct {
|
||||||
hello: string,
|
hello: string,
|
||||||
world: string,
|
world: string,
|
||||||
|
foo: string `cbor:"-"`,
|
||||||
},
|
},
|
||||||
baz: int,
|
baz: int,
|
||||||
}
|
}
|
||||||
@@ -401,6 +402,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
|
|||||||
hello: string,
|
hello: string,
|
||||||
world: string,
|
world: string,
|
||||||
hellope: string,
|
hellope: string,
|
||||||
|
foo: string,
|
||||||
},
|
},
|
||||||
baz: int,
|
baz: int,
|
||||||
}
|
}
|
||||||
@@ -409,6 +411,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
|
|||||||
hello = "hello",
|
hello = "hello",
|
||||||
world = "world",
|
world = "world",
|
||||||
hellope = "hellope",
|
hellope = "hellope",
|
||||||
|
foo = "foo",
|
||||||
},
|
},
|
||||||
baz = 4,
|
baz = 4,
|
||||||
}
|
}
|
||||||
@@ -426,7 +429,7 @@ test_unmarshal_map_into_struct_partially :: proc(t: ^testing.T) {
|
|||||||
less_out: Foo
|
less_out: Foo
|
||||||
uerr := cbor.unmarshal(string(more_bin), &less_out)
|
uerr := cbor.unmarshal(string(more_bin), &less_out)
|
||||||
testing.expect_value(t, uerr, nil)
|
testing.expect_value(t, uerr, nil)
|
||||||
testing.expect_value(t, less, less_out)
|
testing.expect_value(t, less_out, less)
|
||||||
|
|
||||||
delete(more_bin)
|
delete(more_bin)
|
||||||
delete(less_out.bar.hello)
|
delete(less_out.bar.hello)
|
||||||
|
|||||||
Reference in New Issue
Block a user