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

Function readUnionOverrideValue

go/fory/union.go:435–467  ·  view source on GitHub ↗
(ctx *ReadContext, info *unionCaseInfo)

Source from the content-addressed store, hash-verified

433}
434
435func readUnionOverrideValue(ctx *ReadContext, info *unionCaseInfo) (any, bool) {
436 buf := ctx.Buffer()
437 refID, refErr := ctx.RefResolver().TryPreserveRefId(buf)
438 if refErr != nil {
439 ctx.SetError(FromError(refErr))
440 return nil, false
441 }
442 if refID < int32(NotNullValueFlag) {
443 obj := ctx.RefResolver().GetReadObject(refID)
444 if obj.IsValid() {
445 return obj.Interface(), true
446 }
447 return nil, true
448 }
449
450 typeID := TypeId(buf.ReadUint8(ctx.Err()))
451 if ctx.HasError() {
452 return nil, false
453 }
454 if typeID != info.typeID {
455 ctx.SetError(TypeMismatchError(typeID, info.typeID))
456 return nil, false
457 }
458
459 value, ok := readNumericValueByTypeID(ctx, info.type_, info.typeID)
460 if !ok {
461 return nil, false
462 }
463 if value.Kind() == reflect.Ptr {
464 ctx.RefResolver().Reference(value)
465 }
466 return value.Interface(), true
467}
468
469func writeNumericValueByTypeID(ctx *WriteContext, typeID TypeId, value reflect.Value) {
470 buf := ctx.Buffer()

Callers 1

ReadDataMethod · 0.85

Calls 15

FromErrorFunction · 0.85
TypeMismatchErrorFunction · 0.85
readNumericValueByTypeIDFunction · 0.85
TryPreserveRefIdMethod · 0.80
GetReadObjectMethod · 0.80
ReadUint8Method · 0.80
KindMethod · 0.80
int32Function · 0.50
TypeIdEnum · 0.50
BufferMethod · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45

Tested by

no test coverage detected