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)
| 108 | // |
| 109 | // Deprecated: Use protoregistry.GlobalTypes.FindEnumByName instead. |
| 110 | func 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. |
| 156 | func walkEnums(d interface { |