| load("//:plugin.bzl", "ProtoPluginInfo") |
| load( |
| "//:aspect.bzl", |
| "ProtoLibraryAspectNodeInfo", |
| "proto_compile_aspect_attrs", |
| "proto_compile_aspect_impl", |
| "proto_compile_attrs", |
| "proto_compile_impl", |
| ) |
| |
| # Create aspect for ruby_grpc_compile |
| ruby_grpc_compile_aspect = aspect( |
| implementation = proto_compile_aspect_impl, |
| provides = [ProtoLibraryAspectNodeInfo], |
| attr_aspects = ["deps"], |
| attrs = dict( |
| proto_compile_aspect_attrs, |
| _plugins = attr.label_list( |
| doc = "List of protoc plugins to apply", |
| providers = [ProtoPluginInfo], |
| default = [ |
| Label("//ruby:ruby_plugin"), |
| Label("//ruby:grpc_ruby_plugin"), |
| ], |
| ), |
| _prefix = attr.string( |
| doc = "String used to disambiguate aspects when generating outputs", |
| default = "ruby_grpc_compile_aspect", |
| ) |
| ), |
| toolchains = [str(Label("//protobuf:toolchain_type"))], |
| ) |
| |
| # Create compile rule to apply aspect |
| _rule = rule( |
| implementation = proto_compile_impl, |
| attrs = dict( |
| proto_compile_attrs, |
| deps = attr.label_list( |
| mandatory = True, |
| providers = [ProtoInfo, ProtoLibraryAspectNodeInfo], |
| aspects = [ruby_grpc_compile_aspect], |
| ), |
| ), |
| ) |
| |
| # Create macro for converting attrs and passing to compile |
| def ruby_grpc_compile(**kwargs): |
| _rule( |
| verbose_string = "{}".format(kwargs.get("verbose", 0)), |
| merge_directories = True, |
| **{k: v for k, v in kwargs.items() if k != "merge_directories"} |
| ) |