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

Method WriteData

go/fory/union.go:168–196  ·  view source on GitHub ↗

WriteData serializes union payload (case_id + case_value).

(ctx *WriteContext, value reflect.Value)

Source from the content-addressed store, hash-verified

166
167// WriteData serializes union payload (case_id + case_value).
168func (s *UnionSerializer) WriteData(ctx *WriteContext, value reflect.Value) {
169 if ctx.HasError() {
170 return
171 }
172 if err := s.initialize(ctx.TypeResolver()); err != nil {
173 ctx.SetError(SerializationErrorf("union serializer init failed: %v", err))
174 return
175 }
176
177 caseID, caseValue, err := getUnionCaseValue(value)
178 if err != nil {
179 ctx.SetError(SerializationErrorf("union value access failed: %v", err))
180 return
181 }
182 info, ok := s.caseByID[caseID]
183 if !ok {
184 ctx.SetError(SerializationErrorf("unknown union case id: %d", caseID))
185 return
186 }
187
188 ctx.Buffer().WriteVarUint32(uint32(caseID))
189 if info.declaredValue {
190 writeUnionDeclaredValue(ctx, info, reflect.ValueOf(caseValue))
191 } else if info.needsOverride {
192 writeUnionOverrideValue(ctx, info, reflect.ValueOf(caseValue))
193 } else {
194 ctx.WriteValue(reflect.ValueOf(caseValue), RefModeTracking, true)
195 }
196}
197
198// Read is the entry point for union deserialization.
199func (s *UnionSerializer) Read(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value) {

Callers 1

WriteMethod · 0.95

Calls 12

initializeMethod · 0.95
SerializationErrorfFunction · 0.85
getUnionCaseValueFunction · 0.85
writeUnionDeclaredValueFunction · 0.85
writeUnionOverrideValueFunction · 0.85
WriteValueMethod · 0.80
uint32Function · 0.50
HasErrorMethod · 0.45
TypeResolverMethod · 0.45
SetErrorMethod · 0.45
WriteVarUint32Method · 0.45
BufferMethod · 0.45

Tested by

no test coverage detected