@@ -225,7 +225,6 @@ func encodeStructEmbedField(fieldType ast.Expr) {
225
225
_f (" %s_json_marshal_field(stream, val.%s)" , x .Name , x .Name )
226
226
}
227
227
case * ast.StarExpr :
228
- // TODO: handle nil pointer
229
228
switch y := x .X .(type ) {
230
229
case * ast.Ident :
231
230
isNotExported := unicode .IsLower (rune (y .Name [0 ]))
@@ -237,9 +236,13 @@ func encodeStructEmbedField(fieldType ast.Expr) {
237
236
_l (" }" )
238
237
case * ast.SelectorExpr :
239
238
if y .Sel .Name == "Number" {
240
- _l (` stream.WriteObjectField("Number")` )
241
- _l (` stream.WriteRawOrZero((string)(*val.Number))` )
242
- _l (` stream.WriteMore()` )
239
+ _l (` stream.WriteObjectField("Number")` )
240
+ _l (" if val.Number == nil {" )
241
+ _l (` stream.WriteNull()` )
242
+ _l (` } else {` )
243
+ _l (` stream.WriteRawOrZero((string)(*val.Number))` )
244
+ _l (` }` )
245
+ _l (` stream.WriteMore()` )
243
246
} else if y .Sel .Name == "RawMessage" {
244
247
reportError (fmt .Errorf ("embed json.RawMessage is not supported" ))
245
248
return
@@ -251,7 +254,9 @@ func encodeStructEmbedField(fieldType ast.Expr) {
251
254
reportError (fmt .Errorf ("unknown import: %s" , alias ))
252
255
return
253
256
}
254
- _f (" %s_json_marshal_field(stream, *val.%s)" , nodeToString (y ), y .Sel .Name )
257
+ _f (" if val.%s != nil {" , y .Sel .Name )
258
+ _f (" %s_json_marshal_field(stream, *val.%s)" , nodeToString (y ), y .Sel .Name )
259
+ _l (" }" )
255
260
}
256
261
default :
257
262
reportError (fmt .Errorf ("unknown embed field type: %s" , nodeToString (fieldType )))
0 commit comments