blob: 06fb7294b942a75e0adaf0b10657c577bac156a2 [file] [log] [blame]
Richard Levasseurd85a3922024-10-07 15:03:17 -07001# 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"""Implementation of py_api."""
15
16_PY_COMMON_API_LABEL = Label("//python/private/api:py_common_api")
17
18ApiImplInfo = provider(
19 doc = "Provider to hold an API implementation",
20 fields = {
21 "impl": """
22:type: struct
23
24The implementation of the API being provided. The object it contains
25will depend on the target that is providing the API struct.
26""",
27 },
28)
29
30def _py_common_get(ctx):
31 """Get the py_common API instance.
32
33 NOTE: to use this function, the rule must have added `py_common.API_ATTRS`
34 to its attributes.
35
36 Args:
37 ctx: {type}`ctx` current rule ctx
38
39 Returns:
40 {type}`PyCommonApi`
41 """
42
43 # A generic provider is used to decouple the API implementations from
44 # the loading phase of the rules using an implementation.
45 return ctx.attr._py_common_api[ApiImplInfo].impl
46
47py_common = struct(
48 get = _py_common_get,
49 API_ATTRS = {
50 "_py_common_api": attr.label(
51 default = _PY_COMMON_API_LABEL,
52 providers = [ApiImplInfo],
53 ),
54 },
55)