(ctx *WriteContext, refMode RefMode, writeType bool, valueField reflect.Value)
| 221 | } |
| 222 | |
| 223 | func (s *optionalSerializer) writeValue(ctx *WriteContext, refMode RefMode, writeType bool, valueField reflect.Value) { |
| 224 | switch refMode { |
| 225 | case RefModeTracking: |
| 226 | refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), valueField) |
| 227 | if err != nil { |
| 228 | ctx.SetError(FromError(err)) |
| 229 | return |
| 230 | } |
| 231 | if refWritten { |
| 232 | return |
| 233 | } |
| 234 | case RefModeNullOnly: |
| 235 | ctx.Buffer().WriteInt8(NotNullValueFlag) |
| 236 | case RefModeNone: |
| 237 | // No ref/null flag written. |
| 238 | } |
| 239 | if writeType { |
| 240 | info, err := ctx.TypeResolver().getTypeInfo(valueField, true) |
| 241 | if err != nil { |
| 242 | ctx.SetError(FromError(err)) |
| 243 | return |
| 244 | } |
| 245 | ctx.TypeResolver().WriteTypeInfo(ctx.Buffer(), info, ctx.Err()) |
| 246 | } |
| 247 | s.valueSerializer.WriteData(ctx, valueField) |
| 248 | } |
| 249 | |
| 250 | func (s *optionalSerializer) WriteData(ctx *WriteContext, value reflect.Value) { |
| 251 | // WriteData assumes the value is present and writes data only (no null/ref flags). |
no test coverage detected