Helper functions writeMapRefAndType handles reference and type writing for maps. Returns true if value was already written (nil or ref).
(ctx *WriteContext, refMode RefMode, writeType bool, value reflect.Value)
| 577 | // writeMapRefAndType handles reference and type writing for maps. |
| 578 | // Returns true if value was already written (nil or ref). |
| 579 | func writeMapRefAndType(ctx *WriteContext, refMode RefMode, writeType bool, value reflect.Value) bool { |
| 580 | switch refMode { |
| 581 | case RefModeTracking: |
| 582 | if value.IsNil() { |
| 583 | ctx.buffer.WriteInt8(NullFlag) |
| 584 | return true |
| 585 | } |
| 586 | refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.buffer, value) |
| 587 | if err != nil { |
| 588 | ctx.SetError(FromError(err)) |
| 589 | return false |
| 590 | } |
| 591 | if refWritten { |
| 592 | return true |
| 593 | } |
| 594 | case RefModeNullOnly: |
| 595 | if value.IsNil() { |
| 596 | ctx.buffer.WriteInt8(NullFlag) |
| 597 | return true |
| 598 | } |
| 599 | ctx.buffer.WriteInt8(NotNullValueFlag) |
| 600 | } |
| 601 | if writeType { |
| 602 | ctx.buffer.WriteUint8(uint8(MAP)) |
| 603 | } |
| 604 | return false |
| 605 | } |
| 606 | |
| 607 | // readMapRefAndType handles reference and type reading for maps. |
| 608 | // Returns true if a reference was resolved. |
no test coverage detected