@@ -225,6 +225,7 @@ 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
228
229
switch y := x .X .(type ) {
229
230
case * ast.Ident :
230
231
isNotExported := unicode .IsLower (rune (y .Name [0 ]))
@@ -234,11 +235,46 @@ func encodeStructEmbedField(fieldType ast.Expr) {
234
235
_f (" if val.%s != nil {" , y .Name )
235
236
_f (" %s_json_marshal_field(stream, *val.%s)" , y .Name , y .Name )
236
237
_l (" }" )
238
+ case * ast.SelectorExpr :
239
+ if y .Sel .Name == "Number" {
240
+ _l (` stream.WriteObjectField("Number")` )
241
+ _l (` stream.WriteRawOrNull((string)(*val.Number))` )
242
+ _l (` stream.WriteMore()` )
243
+ } else if y .Sel .Name == "RawMessage" {
244
+ reportError (fmt .Errorf ("embed json.RawMessage is not supported" ))
245
+ return
246
+ } else {
247
+ alias := nodeToString (y .X )
248
+ if path , ok := allImports [alias ]; ok {
249
+ referencedImports [alias ] = path
250
+ } else {
251
+ reportError (fmt .Errorf ("unknown import: %s" , alias ))
252
+ return
253
+ }
254
+ _f (" %s_json_marshal_field(stream, *val.%s)" , nodeToString (y ), y .Sel .Name )
255
+ }
237
256
default :
238
257
reportError (fmt .Errorf ("unknown embed field type: %s" , nodeToString (fieldType )))
239
258
return
240
259
}
241
260
case * ast.SelectorExpr :
261
+ if x .Sel .Name == "Number" {
262
+ _l (` stream.WriteObjectField("Number")` )
263
+ _l (` stream.WriteRawOrNull((string)(val.Number))` )
264
+ _l (` stream.WriteMore()` )
265
+ } else if x .Sel .Name == "RawMessage" {
266
+ reportError (fmt .Errorf ("embed json.RawMessage is not supported" ))
267
+ return
268
+ } else {
269
+ alias := nodeToString (x .X )
270
+ if path , ok := allImports [alias ]; ok {
271
+ referencedImports [alias ] = path
272
+ } else {
273
+ reportError (fmt .Errorf ("unknown import: %s" , alias ))
274
+ return
275
+ }
276
+ _f (" %s_json_marshal_field(stream, val.%s)" , nodeToString (x ), x .Sel .Name )
277
+ }
242
278
default :
243
279
reportError (fmt .Errorf ("unknown embed field type: %s" , nodeToString (fieldType )))
244
280
return
0 commit comments