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

Method writeWithTypeInfo

go/fory/pointer.go:97–136  ·  view source on GitHub ↗
(ctx *WriteContext, refMode RefMode, value reflect.Value, typeInfo *TypeInfo)

Source from the content-addressed store, hash-verified

95}
96
97func (s *ptrToValueSerializer) writeWithTypeInfo(ctx *WriteContext, refMode RefMode, value reflect.Value, typeInfo *TypeInfo) {
98 switch refMode {
99 case RefModeTracking:
100 if value.IsNil() {
101 ctx.Buffer().WriteInt8(NullFlag)
102 return
103 }
104 refWritten, err := ctx.RefResolver().WriteRefOrNull(ctx.Buffer(), value)
105 if err != nil {
106 ctx.SetError(FromError(err))
107 return
108 }
109 if refWritten {
110 return
111 }
112 case RefModeNullOnly:
113 if value.IsNil() {
114 ctx.Buffer().WriteInt8(NullFlag)
115 return
116 }
117 ctx.Buffer().WriteInt8(NotNullValueFlag)
118 case RefModeNone:
119 if value.IsNil() {
120 zeroValue := reflect.New(value.Type().Elem()).Elem()
121 if typeInfo == nil {
122 s.Write(ctx, refMode, true, false, value)
123 return
124 }
125 ctx.TypeResolver().WriteTypeInfo(ctx.Buffer(), typeInfo, ctx.Err())
126 s.valueSerializer.WriteData(ctx, zeroValue)
127 return
128 }
129 }
130 if typeInfo == nil {
131 s.Write(ctx, refMode, true, false, value)
132 return
133 }
134 ctx.TypeResolver().WriteTypeInfo(ctx.Buffer(), typeInfo, ctx.Err())
135 s.WriteData(ctx, value)
136}
137
138func (s *ptrToValueSerializer) ReadData(ctx *ReadContext, value reflect.Value) {
139 // Check if value is already allocated (for circular reference handling)

Callers

nothing calls this directly

Calls 13

WriteMethod · 0.95
WriteDataMethod · 0.95
FromErrorFunction · 0.85
WriteRefOrNullMethod · 0.80
WriteDataMethod · 0.65
WriteInt8Method · 0.45
BufferMethod · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45
TypeMethod · 0.45
WriteTypeInfoMethod · 0.45
TypeResolverMethod · 0.45

Tested by

no test coverage detected