Merge pull request #3576 from korvahkh/json-marshal-no-nil

encoding/json: Properly marshal `#no_nil` unions
This commit is contained in:
gingerBill
2024-05-11 21:50:26 +01:00
committed by GitHub
+8 -5
View File
@@ -469,12 +469,15 @@ marshal_to_writer :: proc(w: io.Writer, v: any, opt: ^Marshal_Options) -> (err:
case: panic("Invalid union tag type") case: panic("Invalid union tag type")
} }
if v.data == nil || tag == 0 { if !info.no_nil {
io.write_string(w, "null") or_return if tag == 0 {
} else { io.write_string(w, "null") or_return
id := info.variants[tag-1].id return nil
return marshal_to_writer(w, any{v.data, id}, opt) }
tag -= 1
} }
id := info.variants[tag].id
return marshal_to_writer(w, any{v.data, id}, opt)
case runtime.Type_Info_Enum: case runtime.Type_Info_Enum:
if !opt.use_enum_names || len(info.names) == 0 { if !opt.use_enum_names || len(info.names) == 0 {