writeNullKeyEntry writes a single entry where the key is null
(ctx *WriteContext, value reflect.Value, resolver *TypeResolver, trackRef bool)
| 157 | |
| 158 | // writeNullKeyEntry writes a single entry where the key is null |
| 159 | func (s mapSerializer) writeNullKeyEntry(ctx *WriteContext, value reflect.Value, resolver *TypeResolver, trackRef bool) { |
| 160 | buf := ctx.Buffer() |
| 161 | |
| 162 | if s.hasGenerics && s.valueSerializer != nil { |
| 163 | if s.valueReferencable && trackRef { |
| 164 | buf.WriteInt8(NULL_KEY_VALUE_DECL_TYPE_TRACKING_REF) |
| 165 | s.valueSerializer.Write(ctx, RefModeTracking, false, true, value) |
| 166 | } else { |
| 167 | buf.WriteInt8(NULL_KEY_VALUE_DECL_TYPE) |
| 168 | writeSerializerData(ctx, s.valueSerializer, true, value) |
| 169 | } |
| 170 | return |
| 171 | } |
| 172 | |
| 173 | // Polymorphic value |
| 174 | valueTypeInfo, err := getTypeInfoForValue(value, resolver) |
| 175 | if err != nil { |
| 176 | ctx.SetError(FromError(err)) |
| 177 | return |
| 178 | } |
| 179 | |
| 180 | header := int8(KEY_HAS_NULL) |
| 181 | writeValueRef := trackRef && s.valueReferencable && valueTypeInfo.NeedWriteRef |
| 182 | if writeValueRef { |
| 183 | header |= TRACKING_VALUE_REF |
| 184 | } |
| 185 | buf.WriteInt8(header) |
| 186 | resolver.WriteTypeInfo(buf, valueTypeInfo, ctx.Err()) |
| 187 | |
| 188 | refMode := RefModeNone |
| 189 | if writeValueRef { |
| 190 | refMode = RefModeTracking |
| 191 | } |
| 192 | valueTypeInfo.Serializer.Write(ctx, refMode, false, false, value) |
| 193 | } |
| 194 | |
| 195 | // writeChunk writes a chunk of entries with the same key/value types |
| 196 | func (s mapSerializer) writeChunk(ctx *WriteContext, iter *reflect.MapIter, entryKey, entryVal *reflect.Value, resolver *TypeResolver, trackRef bool) bool { |
no test coverage detected