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

Function getUnionCaseValue

go/fory/union.go:287–312  ·  view source on GitHub ↗
(value reflect.Value)

Source from the content-addressed store, hash-verified

285}
286
287func getUnionCaseValue(value reflect.Value) (uint32, any, error) {
288 if !value.IsValid() {
289 return 0, nil, fmt.Errorf("invalid reflect.Value")
290 }
291 if value.Kind() == reflect.Interface {
292 if value.IsNil() {
293 return 0, nil, fmt.Errorf("nil interface value")
294 }
295 value = value.Elem()
296 }
297 if value.Kind() == reflect.Ptr {
298 if value.IsNil() {
299 return 0, nil, fmt.Errorf("nil union pointer")
300 }
301 if uv, ok := value.Interface().(UnionGetter); ok {
302 caseID, caseValue := uv.ForyUnionGet()
303 return caseID, caseValue, nil
304 }
305 value = value.Elem()
306 }
307 if uv, ok := value.Interface().(UnionGetter); ok {
308 caseID, caseValue := uv.ForyUnionGet()
309 return caseID, caseValue, nil
310 }
311 return 0, nil, fmt.Errorf("type %v does not implement fory.UnionGetter", value.Type())
312}
313
314func getUnionSetter(value reflect.Value) (UnionSetter, error) {
315 if !value.IsValid() {

Callers 1

WriteDataMethod · 0.85

Calls 3

KindMethod · 0.80
ForyUnionGetMethod · 0.65
TypeMethod · 0.45

Tested by

no test coverage detected