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

Function writeSliceRefAndType

go/fory/slice.go:45–71  ·  view source on GitHub ↗

writeSliceRefAndType handles reference and type writing for slice serializers. Returns true if the value was already written (nil or ref), false if data should be written.

(ctx *WriteContext, refMode RefMode, writeType bool, value reflect.Value, typeId TypeId)

Source from the content-addressed store, hash-verified

43// writeSliceRefAndType handles reference and type writing for slice serializers.
44// Returns true if the value was already written (nil or ref), false if data should be written.
45func writeSliceRefAndType(ctx *WriteContext, refMode RefMode, writeType bool, value reflect.Value, typeId TypeId) bool {
46 switch refMode {
47 case RefModeTracking:
48 if value.Kind() == reflect.Slice && value.IsNil() {
49 ctx.Buffer().WriteInt8(NullFlag)
50 return true
51 }
52 refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), value)
53 if err != nil {
54 ctx.SetError(FromError(err))
55 return true
56 }
57 if refWritten {
58 return true
59 }
60 case RefModeNullOnly:
61 if value.Kind() == reflect.Slice && value.IsNil() {
62 ctx.Buffer().WriteInt8(NullFlag)
63 return true
64 }
65 ctx.Buffer().WriteInt8(NotNullValueFlag)
66 }
67 if writeType {
68 ctx.Buffer().WriteUint8(uint8(typeId))
69 }
70 return false
71}
72
73// readSliceRefAndType handles reference and type reading for slice serializers.
74// Returns (true, 0) if a reference was resolved (value already set).

Callers 15

WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85
WriteMethod · 0.85

Calls 9

FromErrorFunction · 0.85
KindMethod · 0.80
WriteRefOrNullMethod · 0.80
WriteUint8Method · 0.80
uint8Function · 0.50
WriteInt8Method · 0.45
BufferMethod · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45

Tested by

no test coverage detected