xref: /aosp_15_r20/external/bazelbuild-rules_python/python/private/enum.bzl (revision 60517a1edbc8ecf509223e9af94a7adec7d736b8)
1 # Copyright 2024 The Bazel Authors. All rights reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 """Enum-like object utilities
16 
17 This is a separate file to minimize transitive loads.
18 """
19 
20 def enum(**kwargs):
21     """Creates a struct whose primary purpose is to be like an enum.
22 
23     Args:
24         **kwargs: The fields of the returned struct. All uppercase names will
25             be treated as enum values and added to `__members__`.
26 
27     Returns:
28         `struct` with the given values. It also has the field `__members__`,
29         which is a dict of the enum names and values.
30     """
31     members = {
32         key: value
33         for key, value in kwargs.items()
34         if key.upper() == key
35     }
36     return struct(__members__ = members, **kwargs)
37