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

Method Write

go/fory/struct.go:83–115  ·  view source on GitHub ↗
(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value)

Source from the content-addressed store, hash-verified

81}
82
83func (s *structSerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) {
84 switch refMode {
85 case RefModeTracking:
86 if value.Kind() == reflect.Ptr && value.IsNil() {
87 ctx.buffer.WriteInt8(NullFlag)
88 return
89 }
90 refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.buffer, value)
91 if err != nil {
92 ctx.SetError(FromError(err))
93 return
94 }
95 if refWritten {
96 return
97 }
98 case RefModeNullOnly:
99 if value.Kind() == reflect.Ptr && value.IsNil() {
100 ctx.buffer.WriteInt8(NullFlag)
101 return
102 }
103 ctx.buffer.WriteInt8(NotNullValueFlag)
104 }
105 if writeType {
106 // Structs have dynamic type IDs, need to look up from TypeResolver
107 typeInfo, err := ctx.TypeResolver().getTypeInfo(value, true)
108 if err != nil {
109 ctx.SetError(FromError(err))
110 return
111 }
112 ctx.TypeResolver().WriteTypeInfo(ctx.buffer, typeInfo, ctx.Err())
113 }
114 s.WriteData(ctx, value)
115}
116
117func (s *structSerializer) writeWithTypeInfo(ctx *WriteContext, refMode RefMode, value reflect.Value, typeInfo *TypeInfo) {
118 switch refMode {

Callers 1

writeWithTypeInfoMethod · 0.95

Calls 11

WriteDataMethod · 0.95
FromErrorFunction · 0.85
KindMethod · 0.80
WriteRefOrNullMethod · 0.80
WriteInt8Method · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45
getTypeInfoMethod · 0.45
TypeResolverMethod · 0.45
WriteTypeInfoMethod · 0.45
ErrMethod · 0.45

Tested by

no test coverage detected