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

Function writeUnionOverrideValue

go/fory/union.go:398–433  ·  view source on GitHub ↗
(ctx *WriteContext, info *unionCaseInfo, value reflect.Value)

Source from the content-addressed store, hash-verified

396}
397
398func writeUnionOverrideValue(ctx *WriteContext, info *unionCaseInfo, value reflect.Value) {
399 if value.Kind() == reflect.Interface {
400 if !value.IsValid() || value.IsNil() {
401 ctx.Buffer().WriteInt8(NullFlag)
402 return
403 }
404 value = value.Elem()
405 }
406 if !value.IsValid() {
407 ctx.Buffer().WriteInt8(NullFlag)
408 return
409 }
410 if value.Kind() == reflect.Ptr {
411 if value.IsNil() {
412 ctx.Buffer().WriteInt8(NullFlag)
413 return
414 }
415 if isRefKind(value.Elem().Kind()) {
416 ctx.SetError(SerializationErrorf("pointer to reference type %s is not allowed", value.Type()))
417 return
418 }
419 }
420 refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), value)
421 if err != nil {
422 ctx.SetError(FromError(err))
423 return
424 }
425 if refWritten {
426 return
427 }
428 ctx.Buffer().WriteUint8(uint8(info.typeID))
429 if value.Kind() == reflect.Ptr {
430 value = value.Elem()
431 }
432 writeNumericValueByTypeID(ctx, info.typeID, value)
433}
434
435func readUnionOverrideValue(ctx *ReadContext, info *unionCaseInfo) (any, bool) {
436 buf := ctx.Buffer()

Callers 1

WriteDataMethod · 0.85

Calls 13

isRefKindFunction · 0.85
SerializationErrorfFunction · 0.85
FromErrorFunction · 0.85
KindMethod · 0.80
WriteRefOrNullMethod · 0.80
WriteUint8Method · 0.80
uint8Function · 0.50
WriteInt8Method · 0.45
BufferMethod · 0.45
SetErrorMethod · 0.45
TypeMethod · 0.45

Tested by

no test coverage detected