Read is the entry point for union deserialization.
(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value)
| 197 | |
| 198 | // Read is the entry point for union deserialization. |
| 199 | func (s *UnionSerializer) Read(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value) { |
| 200 | _ = hasGenerics |
| 201 | err := ctx.Err() |
| 202 | switch refMode { |
| 203 | case RefModeTracking: |
| 204 | refID, refErr := ctx.RefResolver().TryPreserveRefId(ctx.Buffer()) |
| 205 | if refErr != nil { |
| 206 | ctx.SetError(FromError(refErr)) |
| 207 | return |
| 208 | } |
| 209 | if refID < int32(NotNullValueFlag) { |
| 210 | obj := ctx.RefResolver().GetReadObject(refID) |
| 211 | if obj.IsValid() { |
| 212 | value.Set(obj) |
| 213 | } |
| 214 | return |
| 215 | } |
| 216 | case RefModeNullOnly: |
| 217 | flag := ctx.Buffer().ReadInt8(err) |
| 218 | if flag == NullFlag { |
| 219 | return |
| 220 | } |
| 221 | } |
| 222 | if readType { |
| 223 | ctx.TypeResolver().ReadTypeInfo(ctx.Buffer(), err) |
| 224 | } |
| 225 | s.ReadData(ctx, value) |
| 226 | } |
| 227 | |
| 228 | // ReadData deserializes union payload (case_id + case_value). |
| 229 | func (s *UnionSerializer) ReadData(ctx *ReadContext, value reflect.Value) { |
no test coverage detected