aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen van Rijn <Kelimion@users.noreply.github.com>2024-07-21 00:37:11 +0200
committerJeroen van Rijn <Kelimion@users.noreply.github.com>2024-07-21 00:37:11 +0200
commitfc5ce30f34163ce1dfa7ad8b01e60317c8d43c01 (patch)
tree37d24832e2fa9be5d54e9c832d325035f607c3f2
parent572b400d8ea8fff2f331fe14855b384564cf23da (diff)
Allow json to unmarshal empty struct.
-rw-r--r--core/encoding/json/unmarshal.odin3
-rw-r--r--tests/core/encoding/json/test_core_json.odin18
2 files changed, 19 insertions, 2 deletions
diff --git a/core/encoding/json/unmarshal.odin b/core/encoding/json/unmarshal.odin
index 1c1801bcd..127bce650 100644
--- a/core/encoding/json/unmarshal.odin
+++ b/core/encoding/json/unmarshal.odin
@@ -363,8 +363,7 @@ unmarshal_object :: proc(p: ^Parser, v: any, end_token: Token_Kind) -> (err: Unm
}
v := v
- v = reflect.any_base(v)
- ti := type_info_of(v.id)
+ ti := reflect.type_info_base(type_info_of(v.id))
#partial switch t in ti.variant {
case reflect.Type_Info_Struct:
diff --git a/tests/core/encoding/json/test_core_json.odin b/tests/core/encoding/json/test_core_json.odin
index 10e09df3b..42ac9ce0f 100644
--- a/tests/core/encoding/json/test_core_json.odin
+++ b/tests/core/encoding/json/test_core_json.odin
@@ -350,6 +350,24 @@ unmarshal_json :: proc(t: ^testing.T) {
}
@test
+unmarshal_empty_struct :: proc(t: ^testing.T) {
+ TestStruct :: struct {}
+ test := make(map[string]TestStruct)
+ input: = `{
+ "test_1": {},
+ "test_2": {}
+ }`
+ err := json.unmarshal(transmute([]u8)input, &test)
+ defer {
+ for k in test {
+ delete(k)
+ }
+ delete(test)
+ }
+ testing.expect(t, err == nil, "Expected empty struct to unmarshal without error")
+}
+
+@test
surrogate :: proc(t: ^testing.T) {
input := `+ + * 😃 - /`