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

Method Read

go/fory/struct.go:1314–1368  ·  view source on GitHub ↗
(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value)

Source from the content-addressed store, hash-verified

1312}
1313
1314func (s *structSerializer) Read(ctx *ReadContext, refMode RefMode, readType bool, hasGenerics bool, value reflect.Value) {
1315 buf := ctx.Buffer()
1316 ctxErr := ctx.Err()
1317 switch refMode {
1318 case RefModeTracking:
1319 refID, refErr := ctx.RefResolver().TryPreserveRefId(buf)
1320 if refErr != nil {
1321 ctx.SetError(FromError(refErr))
1322 return
1323 }
1324 if refID < int32(NotNullValueFlag) {
1325 // Reference found
1326 obj := ctx.RefResolver().GetReadObject(refID)
1327 if obj.IsValid() {
1328 value.Set(obj)
1329 }
1330 return
1331 }
1332 case RefModeNullOnly:
1333 flag := buf.ReadInt8(ctxErr)
1334 if flag == NullFlag {
1335 return
1336 }
1337 }
1338 if readType {
1339 if s.type_ != nil {
1340 serializer := ctx.TypeResolver().ReadTypeInfoForType(buf, s.type_, ctxErr)
1341 if ctxErr.HasError() {
1342 return
1343 }
1344 if serializer == nil {
1345 ctx.SetError(DeserializationError("unexpected type id for struct"))
1346 return
1347 }
1348 if structSer, ok := serializer.(*structSerializer); ok && len(structSer.fieldDefs) > 0 {
1349 structSer.ReadData(ctx, value)
1350 return
1351 }
1352 s.ReadData(ctx, value)
1353 return
1354 }
1355 // Fallback: read type info when expected type is unknown
1356 typeInfo := ctx.TypeResolver().ReadTypeInfo(buf, ctxErr)
1357 if ctxErr.HasError() {
1358 return
1359 }
1360 if typeInfo != nil {
1361 if structSer, ok := typeInfo.Serializer.(*structSerializer); ok && len(structSer.fieldDefs) > 0 {
1362 structSer.ReadData(ctx, value)
1363 return
1364 }
1365 }
1366 }
1367 s.ReadData(ctx, value)
1368}
1369
1370func (s *structSerializer) ReadWithTypeInfo(ctx *ReadContext, refMode RefMode, typeInfo *TypeInfo, value reflect.Value) {
1371 // typeInfo is already read, don't read it again

Callers 1

ReadWithTypeInfoMethod · 0.95

Calls 15

ReadDataMethod · 0.95
FromErrorFunction · 0.85
DeserializationErrorFunction · 0.85
TryPreserveRefIdMethod · 0.80
GetReadObjectMethod · 0.80
ReadTypeInfoForTypeMethod · 0.80
ReadDataMethod · 0.65
int32Function · 0.50
BufferMethod · 0.45
ErrMethod · 0.45
RefResolverMethod · 0.45
SetErrorMethod · 0.45

Tested by

no test coverage detected