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

Method Write

go/fory/union.go:133–165  ·  view source on GitHub ↗

Write is the entry point for union serialization.

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

Source from the content-addressed store, hash-verified

131
132// Write is the entry point for union serialization.
133func (s *UnionSerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) {
134 _ = hasGenerics
135 switch refMode {
136 case RefModeTracking:
137 if !value.IsValid() || (value.Kind() == reflect.Ptr && value.IsNil()) {
138 ctx.Buffer().WriteInt8(NullFlag)
139 return
140 }
141 refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), value)
142 if err != nil {
143 ctx.SetError(FromError(err))
144 return
145 }
146 if refWritten {
147 return
148 }
149 case RefModeNullOnly:
150 if !value.IsValid() || (value.Kind() == reflect.Ptr && value.IsNil()) {
151 ctx.Buffer().WriteInt8(NullFlag)
152 return
153 }
154 ctx.Buffer().WriteInt8(NotNullValueFlag)
155 }
156 if writeType {
157 typeInfo, err := ctx.TypeResolver().GetTypeInfo(value, true)
158 if err != nil {
159 ctx.SetError(SerializationErrorf("failed to get type info for union: %v", err))
160 return
161 }
162 ctx.TypeResolver().WriteTypeInfo(ctx.Buffer(), typeInfo, ctx.Err())
163 }
164 s.WriteData(ctx, value)
165}
166
167// WriteData serializes union payload (case_id + case_value).
168func (s *UnionSerializer) WriteData(ctx *WriteContext, value reflect.Value) {

Callers

nothing calls this directly

Calls 13

WriteDataMethod · 0.95
FromErrorFunction · 0.85
SerializationErrorfFunction · 0.85
KindMethod · 0.80
WriteRefOrNullMethod · 0.80
WriteInt8Method · 0.45
BufferMethod · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45
GetTypeInfoMethod · 0.45
TypeResolverMethod · 0.45
WriteTypeInfoMethod · 0.45

Tested by

no test coverage detected