Przeglądaj źródła

Allow json to unmarshal empty struct.

Jeroen van Rijn 1 rok temu
rodzic
commit
fc5ce30f34

+ 1 - 2
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:

+ 18 - 0
tests/core/encoding/json/test_core_json.odin

@@ -349,6 +349,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 := `+ + * 😃 - /`