ObjectKeyNullEmpty adds an object to be encoded or skips it if IsNil returns true. Must be used inside a slice or array encoding (does not encode a key) value must implement MarshalerJSONObject
(key string, v MarshalerJSONObject)
| 336 | // Must be used inside a slice or array encoding (does not encode a key) |
| 337 | // value must implement MarshalerJSONObject |
| 338 | func (enc *Encoder) ObjectKeyNullEmpty(key string, v MarshalerJSONObject) { |
| 339 | if enc.hasKeys { |
| 340 | if !enc.keyExists(key) { |
| 341 | return |
| 342 | } |
| 343 | } |
| 344 | enc.grow(5 + len(key)) |
| 345 | r := enc.getPreviousRune() |
| 346 | if r != '{' { |
| 347 | enc.writeByte(',') |
| 348 | } |
| 349 | enc.writeByte('"') |
| 350 | enc.writeStringEscape(key) |
| 351 | enc.writeBytes(objKey) |
| 352 | if v.IsNil() { |
| 353 | enc.writeBytes(nullBytes) |
| 354 | return |
| 355 | } |
| 356 | enc.writeByte('{') |
| 357 | |
| 358 | var origHasKeys = enc.hasKeys |
| 359 | var origKeys = enc.keys |
| 360 | enc.hasKeys = false |
| 361 | enc.keys = nil |
| 362 | |
| 363 | v.MarshalJSONObject(enc) |
| 364 | |
| 365 | enc.hasKeys = origHasKeys |
| 366 | enc.keys = origKeys |
| 367 | |
| 368 | enc.writeByte('}') |
| 369 | } |
| 370 | |
| 371 | // EncodeObjectFunc is a custom func type implementing MarshaleObject. |
| 372 | // Use it to cast a func(*Encoder) to Marshal an object. |