(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value)
| 224 | } |
| 225 | |
| 226 | func (s *ptrToInterfaceSerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) { |
| 227 | switch refMode { |
| 228 | case RefModeTracking: |
| 229 | if value.IsNil() { |
| 230 | ctx.Buffer().WriteInt8(NullFlag) |
| 231 | return |
| 232 | } |
| 233 | refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), value) |
| 234 | if err != nil { |
| 235 | ctx.SetError(FromError(err)) |
| 236 | return |
| 237 | } |
| 238 | if refWritten { |
| 239 | return |
| 240 | } |
| 241 | case RefModeNullOnly: |
| 242 | if value.IsNil() { |
| 243 | ctx.Buffer().WriteInt8(NullFlag) |
| 244 | return |
| 245 | } |
| 246 | ctx.Buffer().WriteInt8(NotNullValueFlag) |
| 247 | } |
| 248 | |
| 249 | // For interface pointers, we don't write type info here |
| 250 | // WriteData will call WriteValue which handles the type info for the concrete value |
| 251 | s.WriteData(ctx, value) |
| 252 | } |
| 253 | |
| 254 | func (s *ptrToInterfaceSerializer) ReadData(ctx *ReadContext, value reflect.Value) { |
| 255 | // Create a new interface pointer |
nothing calls this directly
no test coverage detected