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

Function generateOptionWriteTyped

go/fory/codegen/encoder.go:230–260  ·  view source on GitHub ↗
(buf *bytes.Buffer, field *FieldInfo, fieldAccess string)

Source from the content-addressed store, hash-verified

228}
229
230func generateOptionWriteTyped(buf *bytes.Buffer, field *FieldInfo, fieldAccess string) error {
231 elemType := field.OptionalElem
232 if elemType == nil {
233 fmt.Fprintf(buf, "\tctx.WriteValue(reflect.ValueOf(%s), fory.RefModeTracking, true)\n", fieldAccess)
234 return nil
235 }
236 fmt.Fprintf(buf, "\tif !%s.IsSome() {\n", fieldAccess)
237 fmt.Fprintf(buf, "\t\tbuf.WriteInt8(fory.NullFlag)\n")
238 fmt.Fprintf(buf, "\t} else {\n")
239 fmt.Fprintf(buf, "\t\toptValue := %s.Unwrap()\n", fieldAccess)
240 if isReferencableType(elemType) {
241 fmt.Fprintf(buf, "\t\tif ctx.TrackRef() {\n")
242 fmt.Fprintf(buf, "\t\t\trefWritten, err := ctx.RefResolver().WriteRefOrNull(buf, reflect.ValueOf(optValue))\n")
243 fmt.Fprintf(buf, "\t\t\tif err != nil {\n")
244 fmt.Fprintf(buf, "\t\t\t\treturn err\n")
245 fmt.Fprintf(buf, "\t\t\t}\n")
246 fmt.Fprintf(buf, "\t\t\tif refWritten {\n")
247 fmt.Fprintf(buf, "\t\t\t\treturn nil\n")
248 fmt.Fprintf(buf, "\t\t\t}\n")
249 fmt.Fprintf(buf, "\t\t} else {\n")
250 fmt.Fprintf(buf, "\t\t\tbuf.WriteInt8(fory.NotNullValueFlag)\n")
251 fmt.Fprintf(buf, "\t\t}\n")
252 } else {
253 fmt.Fprintf(buf, "\t\tbuf.WriteInt8(fory.NotNullValueFlag)\n")
254 }
255 if err := generateOptionValueWrite(buf, elemType, "optValue"); err != nil {
256 return err
257 }
258 fmt.Fprintf(buf, "\t}\n")
259 return nil
260}
261
262func generateOptionValueWrite(buf *bytes.Buffer, elemType types.Type, valueExpr string) error {
263 // Handle special named types first

Callers 1

generateFieldWriteTypedFunction · 0.85

Calls 2

isReferencableTypeFunction · 0.85
generateOptionValueWriteFunction · 0.85

Tested by

no test coverage detected