MCPcopy Create free account
hub / github.com/apache/fory / ReadData

Method ReadData

go/fory/union.go:229–280  ·  view source on GitHub ↗

ReadData deserializes union payload (case_id + case_value).

(ctx *ReadContext, value reflect.Value)

Source from the content-addressed store, hash-verified

227
228// ReadData deserializes union payload (case_id + case_value).
229func (s *UnionSerializer) ReadData(ctx *ReadContext, value reflect.Value) {
230 if ctx.HasError() {
231 return
232 }
233 if err := s.initialize(ctx.TypeResolver()); err != nil {
234 ctx.SetError(DeserializationErrorf("union serializer init failed: %v", err))
235 return
236 }
237 err := ctx.Err()
238 caseID := ctx.Buffer().ReadVarUint32(err)
239 if ctx.HasError() {
240 return
241 }
242 info, ok := s.caseByID[caseID]
243 if !ok {
244 SkipAnyValue(ctx, true)
245 if ctx.HasError() {
246 return
247 }
248 ctx.SetError(DeserializationErrorf("unknown union case id: %d", caseID))
249 return
250 }
251
252 var caseValue any
253 if info.declaredValue {
254 val, ok := readUnionDeclaredValue(ctx, info)
255 if !ok {
256 return
257 }
258 caseValue = val
259 } else if info.needsOverride {
260 val, ok := readUnionOverrideValue(ctx, info)
261 if !ok {
262 return
263 }
264 caseValue = val
265 } else {
266 v := reflect.New(info.type_).Elem()
267 ctx.ReadValue(v, RefModeTracking, true)
268 if ctx.HasError() {
269 return
270 }
271 caseValue = v.Interface()
272 }
273
274 setter, setterErr := getUnionSetter(value)
275 if setterErr != nil {
276 ctx.SetError(DeserializationErrorf("union setter access failed: %v", setterErr))
277 return
278 }
279 setter.ForyUnionSet(caseID, caseValue)
280}
281
282// ReadWithTypeInfo deserializes with pre-read type info.
283func (s *UnionSerializer) ReadWithTypeInfo(ctx *ReadContext, refMode RefMode, typeInfo *TypeInfo, value reflect.Value) {

Callers 1

ReadMethod · 0.95

Calls 14

initializeMethod · 0.95
DeserializationErrorfFunction · 0.85
SkipAnyValueFunction · 0.85
readUnionDeclaredValueFunction · 0.85
readUnionOverrideValueFunction · 0.85
getUnionSetterFunction · 0.85
ReadValueMethod · 0.80
ForyUnionSetMethod · 0.65
HasErrorMethod · 0.45
TypeResolverMethod · 0.45
SetErrorMethod · 0.45
ErrMethod · 0.45

Tested by

no test coverage detected