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

Method initialize

go/fory/union.go:97–130  ·  view source on GitHub ↗
(typeResolver *TypeResolver)

Source from the content-addressed store, hash-verified

95}
96
97func (s *UnionSerializer) initialize(typeResolver *TypeResolver) error {
98 if s.initialized {
99 return s.initErr
100 }
101 if s.initErr != nil {
102 return s.initErr
103 }
104 for i := range s.cases {
105 info := &s.cases[i]
106 var serializer Serializer
107 var err error
108 if info.spec != nil {
109 serializer, err = serializerForTypeSpec(typeResolver, info.type_, info.spec)
110 info.declaredValue = true
111 } else {
112 serializer, err = typeResolver.getSerializerByType(info.type_, false)
113 }
114 if err != nil {
115 return err
116 }
117 info.serializer = serializer
118 defaultTypeId := typeResolver.getTypeIdByType(info.type_)
119 if defaultTypeId == 0 {
120 base := info.type_
121 if base.Kind() == reflect.Ptr {
122 base = base.Elem()
123 }
124 defaultTypeId = typeIdFromKind(base)
125 }
126 info.needsOverride = needsUnionEncodingOverride(info.type_, info.typeID, defaultTypeId)
127 }
128 s.initialized = true
129 return nil
130}
131
132// Write is the entry point for union serialization.
133func (s *UnionSerializer) Write(ctx *WriteContext, refMode RefMode, writeType bool, hasGenerics bool, value reflect.Value) {

Calls 6

serializerForTypeSpecFunction · 0.85
typeIdFromKindFunction · 0.85
getSerializerByTypeMethod · 0.80
getTypeIdByTypeMethod · 0.80
KindMethod · 0.80