blob: 23c9620db49ee4c8491c9a5075b8e06f140af56c [file] [edit]
"""This file implements rust_proto_library (frontend macro)."""
# go/for-macros-only
load(
":rules.bzl",
_ProtoCrateNamesInfo = "ProtoCrateNamesInfo",
_rust_cc_proto_library = "rust_cc_proto_library",
_rust_upb_proto_library = "rust_upb_proto_library",
)
ProtoCrateNamesInfo = _ProtoCrateNamesInfo
rust_upb_proto_library = _rust_upb_proto_library
rust_cc_proto_library = _rust_cc_proto_library
def _rust_proto_library_impl(name, deps, visibility = None, tags = None, **kwargs):
"""Declares all the boilerplate needed to use Rust protobufs conveniently.
Hopefully no user will ever need to read this code.
Args:
name: name of the Rust protobuf target.
deps: proto_library target for which to generate Rust gencode.
visibility: visibility of the generated targets.
tags: tags of the generated targets.
**kwargs: other args passed to the rust_<kernel>_proto_library targets.
"""
if not name.endswith("_rust_proto"):
fail(
"Name rust_proto_library target should end with `_rust_proto`, but was '{}'"
.format(name),
)
native.alias(
name = name,
actual = select({
Label("//rust:use_upb_kernel"): name + "_upb",
"//conditions:default": name + "_cpp",
}),
visibility = visibility,
tags = tags,
)
rust_upb_proto_library(
name = name + "_upb",
deps = deps,
visibility = [
"//rust/test:__subpackages__",
native.package_relative_label(":__pkg__"),
],
tags = tags,
**kwargs
)
rust_cc_proto_library(
name = name + "_cpp",
deps = deps,
visibility = [
"//rust/test:__subpackages__",
native.package_relative_label(":__pkg__"),
],
tags = tags,
**kwargs
)
rust_proto_library = macro(
implementation = _rust_proto_library_impl,
inherit_attrs = rust_upb_proto_library,
doc = """Declares all the boilerplate needed to use Rust protobufs conveniently.
Hopefully no user will ever need to read this code.
""",
)