MCPcopy
hub / github.com/golang/protobuf / EnumValueMap

Function EnumValueMap

proto/registry.go:110–153  ·  view source on GitHub ↗

EnumValueMap returns the mapping from enum value names to enum numbers for the enum of the given name. It returns nil if not found. Deprecated: Use protoregistry.GlobalTypes.FindEnumByName instead.

(s enumName)

Source from the content-addressed store, hash-verified

108//
109// Deprecated: Use protoregistry.GlobalTypes.FindEnumByName instead.
110func EnumValueMap(s enumName) enumsByName {
111 if v, ok := enumCache.Load(s); ok {
112 return v.(enumsByName)
113 }
114
115 // Check whether the cache is stale. If the number of files in the current
116 // package differs, then it means that some enums may have been recently
117 // registered upstream that we do not know about.
118 var protoPkg protoreflect.FullName
119 if i := strings.LastIndexByte(s, '.'); i >= 0 {
120 protoPkg = protoreflect.FullName(s[:i])
121 }
122 v, _ := numFilesCache.Load(protoPkg)
123 numFiles, _ := v.(int)
124 if protoregistry.GlobalFiles.NumFilesByPackage(protoPkg) == numFiles {
125 return nil // cache is up-to-date; was not found earlier
126 }
127
128 // Update the enum cache for all enums declared in the given proto package.
129 numFiles = 0
130 protoregistry.GlobalFiles.RangeFilesByPackage(protoPkg, func(fd protoreflect.FileDescriptor) bool {
131 walkEnums(fd, func(ed protoreflect.EnumDescriptor) {
132 name := protoimpl.X.LegacyEnumName(ed)
133 if _, ok := enumCache.Load(name); !ok {
134 m := make(enumsByName)
135 evs := ed.Values()
136 for i := evs.Len() - 1; i >= 0; i-- {
137 ev := evs.Get(i)
138 m[string(ev.Name())] = int32(ev.Number())
139 }
140 enumCache.LoadOrStore(name, m)
141 }
142 })
143 numFiles++
144 return true
145 })
146 numFilesCache.Store(protoPkg, numFiles)
147
148 // Check cache again for enum map.
149 if v, ok := enumCache.Load(s); ok {
150 return v.(enumsByName)
151 }
152 return nil
153}
154
155// walkEnums recursively walks all enums declared in d.
156func walkEnums(d interface {

Callers 1

TestRegistryFunction · 0.92

Calls 3

walkEnumsFunction · 0.85
NameMethod · 0.65
LenMethod · 0.45

Tested by 1

TestRegistryFunction · 0.74