xref: /aosp_15_r20/external/googleapis/repository_rules.bzl (revision d5c09012810ac0c9f33fe448fb6da8260d444cc9)
1*d5c09012SAndroid Build Coastguard Worker"""Repository rules and macros which are expected to be called from WORKSPACE file of either
2*d5c09012SAndroid Build Coastguard Workergoogleapis itself or any third_party repository which consumes googleapis as its dependency.
3*d5c09012SAndroid Build Coastguard Worker"""
4*d5c09012SAndroid Build Coastguard Worker
5*d5c09012SAndroid Build Coastguard Workerdef _switched_rules_impl(ctx):
6*d5c09012SAndroid Build Coastguard Worker    disabled_rule_script = """
7*d5c09012SAndroid Build Coastguard Workerdef {rule_name}(**kwargs):
8*d5c09012SAndroid Build Coastguard Worker    pass
9*d5c09012SAndroid Build Coastguard Worker"""
10*d5c09012SAndroid Build Coastguard Worker    enabled_native_rule_script = """
11*d5c09012SAndroid Build Coastguard Worker{rule_name} = {native_rule_name}
12*d5c09012SAndroid Build Coastguard Worker"""
13*d5c09012SAndroid Build Coastguard Worker    enabled_rule_script = """
14*d5c09012SAndroid Build Coastguard Workerload("{file_label}", _{rule_name} = "{loaded_rule_name}")
15*d5c09012SAndroid Build Coastguard Worker"""
16*d5c09012SAndroid Build Coastguard Worker    elabled_rule_scrip_alias = """
17*d5c09012SAndroid Build Coastguard Worker{rule_name} = _{rule_name}
18*d5c09012SAndroid Build Coastguard Worker"""
19*d5c09012SAndroid Build Coastguard Worker    load_rules = []  # load() must go before everythin else in .bzl files since Bazel 0.25.0
20*d5c09012SAndroid Build Coastguard Worker    rules = []
21*d5c09012SAndroid Build Coastguard Worker
22*d5c09012SAndroid Build Coastguard Worker    for rule_name, value_and_name in ctx.attr.rules.items():
23*d5c09012SAndroid Build Coastguard Worker        value = value_and_name[0]
24*d5c09012SAndroid Build Coastguard Worker        loaded_rule_name = value_and_name[1] if value_and_name[1] else rule_name
25*d5c09012SAndroid Build Coastguard Worker
26*d5c09012SAndroid Build Coastguard Worker        if not value:
27*d5c09012SAndroid Build Coastguard Worker            rules.append(disabled_rule_script.format(rule_name = rule_name))
28*d5c09012SAndroid Build Coastguard Worker        elif value.startswith("@"):
29*d5c09012SAndroid Build Coastguard Worker            load_rules.append(enabled_rule_script.format(
30*d5c09012SAndroid Build Coastguard Worker                file_label = value,
31*d5c09012SAndroid Build Coastguard Worker                rule_name = rule_name,
32*d5c09012SAndroid Build Coastguard Worker                loaded_rule_name = loaded_rule_name,
33*d5c09012SAndroid Build Coastguard Worker            ))
34*d5c09012SAndroid Build Coastguard Worker            rules.append(elabled_rule_scrip_alias.format(rule_name = rule_name))
35*d5c09012SAndroid Build Coastguard Worker        elif value.startswith("native."):
36*d5c09012SAndroid Build Coastguard Worker            rules.append(
37*d5c09012SAndroid Build Coastguard Worker                enabled_native_rule_script.format(rule_name = rule_name, native_rule_name = value),
38*d5c09012SAndroid Build Coastguard Worker            )
39*d5c09012SAndroid Build Coastguard Worker        else:
40*d5c09012SAndroid Build Coastguard Worker            rules.append(value)
41*d5c09012SAndroid Build Coastguard Worker
42*d5c09012SAndroid Build Coastguard Worker    ctx.file("BUILD.bazel", "")
43*d5c09012SAndroid Build Coastguard Worker    ctx.file("imports.bzl", "".join(load_rules + rules))
44*d5c09012SAndroid Build Coastguard Worker
45*d5c09012SAndroid Build Coastguard Workerswitched_rules = repository_rule(
46*d5c09012SAndroid Build Coastguard Worker    implementation = _switched_rules_impl,
47*d5c09012SAndroid Build Coastguard Worker    attrs = {
48*d5c09012SAndroid Build Coastguard Worker        "rules": attr.string_list_dict(
49*d5c09012SAndroid Build Coastguard Worker            allow_empty = True,
50*d5c09012SAndroid Build Coastguard Worker            mandatory = False,
51*d5c09012SAndroid Build Coastguard Worker            default = {},
52*d5c09012SAndroid Build Coastguard Worker        ),
53*d5c09012SAndroid Build Coastguard Worker    },
54*d5c09012SAndroid Build Coastguard Worker)
55*d5c09012SAndroid Build Coastguard Worker
56*d5c09012SAndroid Build Coastguard Workerdef switched_rules_by_language(
57*d5c09012SAndroid Build Coastguard Worker        name,
58*d5c09012SAndroid Build Coastguard Worker        gapic = False,
59*d5c09012SAndroid Build Coastguard Worker        grpc = False,
60*d5c09012SAndroid Build Coastguard Worker        java = False,
61*d5c09012SAndroid Build Coastguard Worker        go = False,
62*d5c09012SAndroid Build Coastguard Worker        cc = False,
63*d5c09012SAndroid Build Coastguard Worker        php = False,
64*d5c09012SAndroid Build Coastguard Worker        nodejs = False,
65*d5c09012SAndroid Build Coastguard Worker        python = False,
66*d5c09012SAndroid Build Coastguard Worker        ruby = False,
67*d5c09012SAndroid Build Coastguard Worker        csharp = False,
68*d5c09012SAndroid Build Coastguard Worker        go_test = False,
69*d5c09012SAndroid Build Coastguard Worker        rules_override = {}):
70*d5c09012SAndroid Build Coastguard Worker    """Switches rules in the generated imports.bzl between no-op and the actual implementation.
71*d5c09012SAndroid Build Coastguard Worker
72*d5c09012SAndroid Build Coastguard Worker    This defines which language-specific rules (or client type specific, like grpc or gapic) should
73*d5c09012SAndroid Build Coastguard Worker    be enabled during the build. All non-enabled language-specific rules will default to no-op
74*d5c09012SAndroid Build Coastguard Worker    implementations. Examples of the language-specific rules are: java_gapic_library
75*d5c09012SAndroid Build Coastguard Worker    (Java-specific), go_proto_library (Go-specific), proto_library_with_info (gapic-specific) etc.
76*d5c09012SAndroid Build Coastguard Worker    Note, proto_library rule is always enabled.
77*d5c09012SAndroid Build Coastguard Worker
78*d5c09012SAndroid Build Coastguard Worker    For example, to use this rule and enable Java and Go rules, add the following in the external
79*d5c09012SAndroid Build Coastguard Worker    repository which imports com_google_googleapis repository and its corresponding dependencies:
80*d5c09012SAndroid Build Coastguard Worker
81*d5c09012SAndroid Build Coastguard Worker        load("@com_google_googleapis//:repository_rules.bzl", "switched_rules_by_language")
82*d5c09012SAndroid Build Coastguard Worker
83*d5c09012SAndroid Build Coastguard Worker        switched_rules_by_language(
84*d5c09012SAndroid Build Coastguard Worker            name = "com_google_googleapis_imports",
85*d5c09012SAndroid Build Coastguard Worker            grpc = True,
86*d5c09012SAndroid Build Coastguard Worker            gapic = True,
87*d5c09012SAndroid Build Coastguard Worker            go = True,
88*d5c09012SAndroid Build Coastguard Worker            java = True,
89*d5c09012SAndroid Build Coastguard Worker        )
90*d5c09012SAndroid Build Coastguard Worker
91*d5c09012SAndroid Build Coastguard Worker    Note, for build to work you should also import the language-specific transitive dependencies.
92*d5c09012SAndroid Build Coastguard Worker
93*d5c09012SAndroid Build Coastguard Worker    Args:
94*d5c09012SAndroid Build Coastguard Worker        name (str): name of a target, is expected to be "com_google_googleapis_imports".
95*d5c09012SAndroid Build Coastguard Worker        gapic (bool): Enable GAPIC specific rules. The GAPIC rules are also language-specific, so
96*d5c09012SAndroid Build Coastguard Worker            the actual enabled rules will be determined by the other language-specific arguments of
97*d5c09012SAndroid Build Coastguard Worker            this rule. False by default.
98*d5c09012SAndroid Build Coastguard Worker        grpc (bool): Enable gRPC specific rules. The gRPC rules are also language-specific, so
99*d5c09012SAndroid Build Coastguard Worker            the actual enabled rules will be determined by the other language-specific arguments of
100*d5c09012SAndroid Build Coastguard Worker            this rule. False by default.
101*d5c09012SAndroid Build Coastguard Worker        java (bool): Enable Java specific rules. False by default.
102*d5c09012SAndroid Build Coastguard Worker        go (bool): Enable Go specific rules. False by default.
103*d5c09012SAndroid Build Coastguard Worker        cc (bool): Enable C++ specific rules. False by default. Partially implemented (no GAPIC
104*d5c09012SAndroid Build Coastguard Worker            support).
105*d5c09012SAndroid Build Coastguard Worker        php (bool): Enable PHP specific rules. False by default.
106*d5c09012SAndroid Build Coastguard Worker        nodejs (bool): Enable Node.js specific rules. False by default.
107*d5c09012SAndroid Build Coastguard Worker        ruby (bool): Enable Ruby specific rules. False by default.
108*d5c09012SAndroid Build Coastguard Worker        python (bool): Enable Python-specific rules. False by default.
109*d5c09012SAndroid Build Coastguard Worker        csharp (bool): Enable C# specific rules. False by default.
110*d5c09012SAndroid Build Coastguard Worker        go_test (bool): A special temporary flag to disable only go_test targets. This is needed to
111*d5c09012SAndroid Build Coastguard Worker            support rules_go version 0.24.0+, which made importmap duplicates an error instead of a
112*d5c09012SAndroid Build Coastguard Worker            warning. More details: https://github.com/bazelbuild/rules_go/issues/1986.
113*d5c09012SAndroid Build Coastguard Worker        rules_override (dict): Custom rule overrides (for advanced usage).
114*d5c09012SAndroid Build Coastguard Worker    """
115*d5c09012SAndroid Build Coastguard Worker
116*d5c09012SAndroid Build Coastguard Worker    rules = {}
117*d5c09012SAndroid Build Coastguard Worker
118*d5c09012SAndroid Build Coastguard Worker    #
119*d5c09012SAndroid Build Coastguard Worker    # Common
120*d5c09012SAndroid Build Coastguard Worker    #
121*d5c09012SAndroid Build Coastguard Worker    rules["proto_library_with_info"] = _switch(
122*d5c09012SAndroid Build Coastguard Worker        gapic,
123*d5c09012SAndroid Build Coastguard Worker        "@rules_gapic//:gapic.bzl",
124*d5c09012SAndroid Build Coastguard Worker    )
125*d5c09012SAndroid Build Coastguard Worker    rules["moved_proto_library"] = _switch(
126*d5c09012SAndroid Build Coastguard Worker        gapic,
127*d5c09012SAndroid Build Coastguard Worker        "@rules_gapic//:gapic.bzl",
128*d5c09012SAndroid Build Coastguard Worker    )
129*d5c09012SAndroid Build Coastguard Worker
130*d5c09012SAndroid Build Coastguard Worker    #
131*d5c09012SAndroid Build Coastguard Worker    # Java
132*d5c09012SAndroid Build Coastguard Worker    #
133*d5c09012SAndroid Build Coastguard Worker    rules["java_proto_library"] = _switch(
134*d5c09012SAndroid Build Coastguard Worker        java,
135*d5c09012SAndroid Build Coastguard Worker        "native.java_proto_library",
136*d5c09012SAndroid Build Coastguard Worker    )
137*d5c09012SAndroid Build Coastguard Worker    rules["java_grpc_library"] = _switch(
138*d5c09012SAndroid Build Coastguard Worker        java and grpc,
139*d5c09012SAndroid Build Coastguard Worker        "@io_grpc_grpc_java//:java_grpc_library.bzl",
140*d5c09012SAndroid Build Coastguard Worker    )
141*d5c09012SAndroid Build Coastguard Worker    rules["java_gapic_library"] = _switch(
142*d5c09012SAndroid Build Coastguard Worker        java and grpc and gapic,
143*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_java//rules_java_gapic:java_gapic.bzl",
144*d5c09012SAndroid Build Coastguard Worker    )
145*d5c09012SAndroid Build Coastguard Worker    rules["java_gapic_test"] = _switch(
146*d5c09012SAndroid Build Coastguard Worker        java and grpc and gapic,
147*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_java//rules_java_gapic:java_gapic.bzl",
148*d5c09012SAndroid Build Coastguard Worker    )
149*d5c09012SAndroid Build Coastguard Worker    rules["java_gapic_assembly_gradle_pkg"] = _switch(
150*d5c09012SAndroid Build Coastguard Worker        java and grpc and gapic,
151*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_java//rules_java_gapic:java_gapic_pkg.bzl",
152*d5c09012SAndroid Build Coastguard Worker    )
153*d5c09012SAndroid Build Coastguard Worker
154*d5c09012SAndroid Build Coastguard Worker    #
155*d5c09012SAndroid Build Coastguard Worker    # Python
156*d5c09012SAndroid Build Coastguard Worker    #
157*d5c09012SAndroid Build Coastguard Worker    rules["py_proto_library"] = _switch(
158*d5c09012SAndroid Build Coastguard Worker        python,
159*d5c09012SAndroid Build Coastguard Worker        "@com_github_grpc_grpc//bazel:python_rules.bzl",
160*d5c09012SAndroid Build Coastguard Worker    )
161*d5c09012SAndroid Build Coastguard Worker    rules["py_grpc_library"] = _switch(
162*d5c09012SAndroid Build Coastguard Worker        python and grpc,
163*d5c09012SAndroid Build Coastguard Worker        "@com_github_grpc_grpc//bazel:python_rules.bzl",
164*d5c09012SAndroid Build Coastguard Worker    )
165*d5c09012SAndroid Build Coastguard Worker    rules["py_gapic_library"] = _switch(
166*d5c09012SAndroid Build Coastguard Worker        python and grpc and gapic,
167*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_python//rules_python_gapic:py_gapic.bzl",
168*d5c09012SAndroid Build Coastguard Worker    )
169*d5c09012SAndroid Build Coastguard Worker    rules["py_test"] = _switch(
170*d5c09012SAndroid Build Coastguard Worker        python and grpc and gapic,
171*d5c09012SAndroid Build Coastguard Worker        "native.py_test",
172*d5c09012SAndroid Build Coastguard Worker    )
173*d5c09012SAndroid Build Coastguard Worker    rules["py_gapic_assembly_pkg"] = _switch(
174*d5c09012SAndroid Build Coastguard Worker        python and grpc and gapic,
175*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_python//rules_python_gapic:py_gapic_pkg.bzl",
176*d5c09012SAndroid Build Coastguard Worker    )
177*d5c09012SAndroid Build Coastguard Worker    rules["py_import"] = _switch(
178*d5c09012SAndroid Build Coastguard Worker        python and grpc and gapic,
179*d5c09012SAndroid Build Coastguard Worker        "@rules_python//python:defs.bzl",
180*d5c09012SAndroid Build Coastguard Worker    )
181*d5c09012SAndroid Build Coastguard Worker
182*d5c09012SAndroid Build Coastguard Worker    #
183*d5c09012SAndroid Build Coastguard Worker    # Go
184*d5c09012SAndroid Build Coastguard Worker    #
185*d5c09012SAndroid Build Coastguard Worker    rules["go_proto_library"] = _switch(
186*d5c09012SAndroid Build Coastguard Worker        go,
187*d5c09012SAndroid Build Coastguard Worker        "@io_bazel_rules_go//proto:def.bzl",
188*d5c09012SAndroid Build Coastguard Worker    )
189*d5c09012SAndroid Build Coastguard Worker    rules["go_grpc_library"] = _switch(
190*d5c09012SAndroid Build Coastguard Worker        go,
191*d5c09012SAndroid Build Coastguard Worker        "@io_bazel_rules_go//proto:def.bzl",
192*d5c09012SAndroid Build Coastguard Worker    )
193*d5c09012SAndroid Build Coastguard Worker    rules["go_library"] = _switch(
194*d5c09012SAndroid Build Coastguard Worker        go,
195*d5c09012SAndroid Build Coastguard Worker        "@io_bazel_rules_go//go:def.bzl",
196*d5c09012SAndroid Build Coastguard Worker    )
197*d5c09012SAndroid Build Coastguard Worker    rules["go_test"] = _switch(
198*d5c09012SAndroid Build Coastguard Worker        go and grpc and gapic and go_test,
199*d5c09012SAndroid Build Coastguard Worker        "@io_bazel_rules_go//go:def.bzl",
200*d5c09012SAndroid Build Coastguard Worker    )
201*d5c09012SAndroid Build Coastguard Worker    rules["go_gapic_library"] = _switch(
202*d5c09012SAndroid Build Coastguard Worker        go and grpc and gapic,
203*d5c09012SAndroid Build Coastguard Worker        "@com_googleapis_gapic_generator_go//rules_go_gapic:go_gapic.bzl",
204*d5c09012SAndroid Build Coastguard Worker    )
205*d5c09012SAndroid Build Coastguard Worker    rules["go_gapic_assembly_pkg"] = _switch(
206*d5c09012SAndroid Build Coastguard Worker        go and grpc and gapic,
207*d5c09012SAndroid Build Coastguard Worker        "@com_googleapis_gapic_generator_go//rules_go_gapic:go_gapic_pkg.bzl",
208*d5c09012SAndroid Build Coastguard Worker    )
209*d5c09012SAndroid Build Coastguard Worker
210*d5c09012SAndroid Build Coastguard Worker    #
211*d5c09012SAndroid Build Coastguard Worker    # C++
212*d5c09012SAndroid Build Coastguard Worker    #
213*d5c09012SAndroid Build Coastguard Worker    rules["cc_proto_library"] = _switch(
214*d5c09012SAndroid Build Coastguard Worker        cc,
215*d5c09012SAndroid Build Coastguard Worker        "native.cc_proto_library",
216*d5c09012SAndroid Build Coastguard Worker    )
217*d5c09012SAndroid Build Coastguard Worker    rules["cc_grpc_library"] = _switch(
218*d5c09012SAndroid Build Coastguard Worker        cc and grpc,
219*d5c09012SAndroid Build Coastguard Worker        "@com_github_grpc_grpc//bazel:cc_grpc_library.bzl",
220*d5c09012SAndroid Build Coastguard Worker    )
221*d5c09012SAndroid Build Coastguard Worker    rules["cc_gapic_library"] = _switch(False)
222*d5c09012SAndroid Build Coastguard Worker
223*d5c09012SAndroid Build Coastguard Worker    #
224*d5c09012SAndroid Build Coastguard Worker    # PHP
225*d5c09012SAndroid Build Coastguard Worker    #
226*d5c09012SAndroid Build Coastguard Worker    rules["php_proto_library"] = _switch(
227*d5c09012SAndroid Build Coastguard Worker        php,
228*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_php//rules_php_gapic:php_gapic.bzl",
229*d5c09012SAndroid Build Coastguard Worker        "php_proto_library",
230*d5c09012SAndroid Build Coastguard Worker    )
231*d5c09012SAndroid Build Coastguard Worker    rules["php_grpc_library"] = _switch(
232*d5c09012SAndroid Build Coastguard Worker        php and grpc,
233*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_php//rules_php_gapic:php_gapic.bzl",
234*d5c09012SAndroid Build Coastguard Worker        "php_grpc_library",
235*d5c09012SAndroid Build Coastguard Worker    )
236*d5c09012SAndroid Build Coastguard Worker    rules["php_gapic_library"] = _switch(
237*d5c09012SAndroid Build Coastguard Worker        php and grpc and gapic,
238*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_php//rules_php_gapic:php_gapic.bzl",
239*d5c09012SAndroid Build Coastguard Worker        "php_gapic_library",
240*d5c09012SAndroid Build Coastguard Worker    )
241*d5c09012SAndroid Build Coastguard Worker    rules["php_gapic_assembly_pkg"] = _switch(
242*d5c09012SAndroid Build Coastguard Worker        php and grpc and gapic,
243*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_php//rules_php_gapic:php_gapic_pkg.bzl",
244*d5c09012SAndroid Build Coastguard Worker        "php_gapic_assembly_pkg",
245*d5c09012SAndroid Build Coastguard Worker    )
246*d5c09012SAndroid Build Coastguard Worker
247*d5c09012SAndroid Build Coastguard Worker    #
248*d5c09012SAndroid Build Coastguard Worker    # Node.js
249*d5c09012SAndroid Build Coastguard Worker    #
250*d5c09012SAndroid Build Coastguard Worker    rules["nodejs_gapic_library"] = _switch(
251*d5c09012SAndroid Build Coastguard Worker        nodejs and grpc and gapic,
252*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_typescript//rules_typescript_gapic:typescript_gapic.bzl",
253*d5c09012SAndroid Build Coastguard Worker        "typescript_gapic_library",
254*d5c09012SAndroid Build Coastguard Worker    )
255*d5c09012SAndroid Build Coastguard Worker    rules["nodejs_gapic_assembly_pkg"] = _switch(
256*d5c09012SAndroid Build Coastguard Worker        nodejs and grpc and gapic,
257*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_typescript//rules_typescript_gapic:typescript_gapic_pkg.bzl",
258*d5c09012SAndroid Build Coastguard Worker        "typescript_gapic_assembly_pkg",
259*d5c09012SAndroid Build Coastguard Worker    )
260*d5c09012SAndroid Build Coastguard Worker
261*d5c09012SAndroid Build Coastguard Worker    #
262*d5c09012SAndroid Build Coastguard Worker    # Ruby
263*d5c09012SAndroid Build Coastguard Worker    #
264*d5c09012SAndroid Build Coastguard Worker    rules["ruby_proto_library"] = _switch(
265*d5c09012SAndroid Build Coastguard Worker        ruby,
266*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_ruby//rules_ruby_gapic:ruby_gapic.bzl",
267*d5c09012SAndroid Build Coastguard Worker    )
268*d5c09012SAndroid Build Coastguard Worker    rules["ruby_grpc_library"] = _switch(
269*d5c09012SAndroid Build Coastguard Worker        ruby and grpc,
270*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_ruby//rules_ruby_gapic:ruby_gapic.bzl",
271*d5c09012SAndroid Build Coastguard Worker    )
272*d5c09012SAndroid Build Coastguard Worker    rules["ruby_ads_gapic_library"] = _switch(
273*d5c09012SAndroid Build Coastguard Worker        ruby and grpc and gapic,
274*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_ruby//rules_ruby_gapic:ruby_gapic.bzl",
275*d5c09012SAndroid Build Coastguard Worker    )
276*d5c09012SAndroid Build Coastguard Worker    rules["ruby_cloud_gapic_library"] = _switch(
277*d5c09012SAndroid Build Coastguard Worker        ruby and grpc and gapic,
278*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_ruby//rules_ruby_gapic:ruby_gapic.bzl",
279*d5c09012SAndroid Build Coastguard Worker    )
280*d5c09012SAndroid Build Coastguard Worker    rules["ruby_gapic_assembly_pkg"] = _switch(
281*d5c09012SAndroid Build Coastguard Worker        ruby and grpc and gapic,
282*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_ruby//rules_ruby_gapic:ruby_gapic_pkg.bzl",
283*d5c09012SAndroid Build Coastguard Worker    )
284*d5c09012SAndroid Build Coastguard Worker
285*d5c09012SAndroid Build Coastguard Worker    #
286*d5c09012SAndroid Build Coastguard Worker    # C#
287*d5c09012SAndroid Build Coastguard Worker    #
288*d5c09012SAndroid Build Coastguard Worker    rules["csharp_proto_library"] = _switch(
289*d5c09012SAndroid Build Coastguard Worker        csharp,
290*d5c09012SAndroid Build Coastguard Worker        "@rules_gapic//csharp:csharp_gapic.bzl",
291*d5c09012SAndroid Build Coastguard Worker    )
292*d5c09012SAndroid Build Coastguard Worker    rules["csharp_grpc_library"] = _switch(
293*d5c09012SAndroid Build Coastguard Worker        csharp and grpc,
294*d5c09012SAndroid Build Coastguard Worker        "@rules_gapic//csharp:csharp_gapic.bzl",
295*d5c09012SAndroid Build Coastguard Worker    )
296*d5c09012SAndroid Build Coastguard Worker    rules["csharp_gapic_library"] = _switch(
297*d5c09012SAndroid Build Coastguard Worker        csharp and grpc and gapic,
298*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_csharp//rules_csharp_gapic:csharp_gapic.bzl",
299*d5c09012SAndroid Build Coastguard Worker    )
300*d5c09012SAndroid Build Coastguard Worker    rules["csharp_gapic_assembly_pkg"] = _switch(
301*d5c09012SAndroid Build Coastguard Worker        csharp and grpc and gapic,
302*d5c09012SAndroid Build Coastguard Worker        "@gapic_generator_csharp//rules_csharp_gapic:csharp_gapic_pkg.bzl",
303*d5c09012SAndroid Build Coastguard Worker    )
304*d5c09012SAndroid Build Coastguard Worker
305*d5c09012SAndroid Build Coastguard Worker    rules.update(rules_override)
306*d5c09012SAndroid Build Coastguard Worker
307*d5c09012SAndroid Build Coastguard Worker    switched_rules(
308*d5c09012SAndroid Build Coastguard Worker        name = name,
309*d5c09012SAndroid Build Coastguard Worker        rules = rules,
310*d5c09012SAndroid Build Coastguard Worker    )
311*d5c09012SAndroid Build Coastguard Worker
312*d5c09012SAndroid Build Coastguard Workerdef _switch(enabled, enabled_value = "", actual_name = ""):
313*d5c09012SAndroid Build Coastguard Worker    if enabled:
314*d5c09012SAndroid Build Coastguard Worker        return [enabled_value, actual_name]
315*d5c09012SAndroid Build Coastguard Worker    else:
316*d5c09012SAndroid Build Coastguard Worker        return ["", actual_name]
317