diff --git a/doc/BUILD.bazel b/doc/BUILD.bazel index 932d2d8a8..e9ed47871 100644 --- a/doc/BUILD.bazel +++ b/doc/BUILD.bazel @@ -10,6 +10,7 @@ _DOC_SRCS = { "swift_usage_aspect", ], "providers": [ + "SwiftGRPCInfo", "SwiftInfo", "SwiftToolchainInfo", "SwiftProtoInfo", diff --git a/doc/providers.md b/doc/providers.md index 4e9193ebb..83eb93a01 100644 --- a/doc/providers.md +++ b/doc/providers.md @@ -7,11 +7,31 @@ with the Swift build rules as needed. On this page: + * [SwiftGRPCInfo](#SwiftGRPCInfo) * [SwiftInfo](#SwiftInfo) * [SwiftToolchainInfo](#SwiftToolchainInfo) * [SwiftProtoInfo](#SwiftProtoInfo) * [SwiftUsageInfo](#SwiftUsageInfo) + + +## SwiftGRPCInfo + +
+SwiftGRPCInfo(flavor, direct_pbgrpc_files)
+
+ +Propagates Swift-specific information about a `swift_grpc_library`. + +**FIELDS** + + +| Name | Description | +| :------------- | :------------- | +| flavor | The flavor of GRPC that was generated. E.g. server, client, or client_stubs. | +| direct_pbgrpc_files | `Depset` of `File`s. The Swift source files (`.grpc.swift`) generated from the `.proto` files in direct dependencies. | + + ## SwiftInfo @@ -41,7 +61,7 @@ has reasonable defaults for any fields not explicitly set. ## SwiftProtoInfo
-SwiftProtoInfo(module_mappings, pbswift_files)
+SwiftProtoInfo(module_mappings, pbswift_files, direct_pbswift_files)
 
Propagates Swift-specific information about a `proto_library`. @@ -53,6 +73,7 @@ Propagates Swift-specific information about a `proto_library`. | :------------- | :------------- | | module_mappings | `Sequence` of `struct`s. Each struct contains `module_name` and `proto_file_paths` fields that denote the transitive mappings from `.proto` files to Swift modules. This allows messages that reference messages in other libraries to import those modules in generated code. | | pbswift_files | `Depset` of `File`s. The transitive Swift source files (`.pb.swift`) generated from the `.proto` files. | +| direct_pbswift_files | `list` of `File`s. The Swift source files (`.pb.swift`) generated from the `.proto` files in direct dependencies. | diff --git a/swift/internal/providers.bzl b/swift/internal/providers.bzl index df7699465..f0e6ae04d 100644 --- a/swift/internal/providers.bzl +++ b/swift/internal/providers.bzl @@ -62,6 +62,19 @@ the allowlist. }, ) +SwiftGRPCInfo = provider( + doc = "Propagates Swift-specific information about a `swift_grpc_library`.", + fields = { + "flavor": """\ +The flavor of GRPC that was generated. E.g. server, client, or client_stubs. +""", + "direct_pbgrpc_files": """\ +`Depset` of `File`s. The Swift source files (`.grpc.swift`) generated +from the `.proto` files in direct dependencies. +""", + }, +) + SwiftInfo = provider( doc = """\ Contains information about the compiled artifacts of a Swift module. @@ -120,6 +133,10 @@ libraries to import those modules in generated code. "pbswift_files": """\ `Depset` of `File`s. The transitive Swift source files (`.pb.swift`) generated from the `.proto` files. +""", + "direct_pbswift_files": """\ +`list` of `File`s. The Swift source files (`.pb.swift`) generated +from the `.proto` files in direct dependencies. """, }, ) diff --git a/swift/internal/swift_grpc_library.bzl b/swift/internal/swift_grpc_library.bzl index 03458df34..48bf9b7a4 100644 --- a/swift/internal/swift_grpc_library.bzl +++ b/swift/internal/swift_grpc_library.bzl @@ -33,7 +33,13 @@ load( "proto_import_path", "register_module_mapping_write_action", ) -load(":providers.bzl", "SwiftInfo", "SwiftProtoInfo", "SwiftToolchainInfo") +load( + ":providers.bzl", + "SwiftGRPCInfo", + "SwiftInfo", + "SwiftProtoInfo", + "SwiftToolchainInfo", +) load(":swift_common.bzl", "swift_common") load(":transitions.bzl", "proto_compiler_transition") load(":utils.bzl", "compact", "get_providers") @@ -334,6 +340,10 @@ def _swift_grpc_library_impl(ctx): linking_context = linking_context, ), deps[0][SwiftProtoInfo], + SwiftGRPCInfo( + flavor = ctx.attr.flavor, + direct_pbgrpc_files = generated_files, + ), swift_common.create_swift_info( modules = [module_context], swift_infos = get_providers(compile_deps, SwiftInfo), diff --git a/swift/internal/swift_protoc_gen_aspect.bzl b/swift/internal/swift_protoc_gen_aspect.bzl index 06039c05c..d0a081bd7 100644 --- a/swift/internal/swift_protoc_gen_aspect.bzl +++ b/swift/internal/swift_protoc_gen_aspect.bzl @@ -260,6 +260,7 @@ def _build_swift_proto_info_provider( An instance of `SwiftProtoInfo`. """ return SwiftProtoInfo( + direct_pbswift_files = pbswift_files, module_mappings = transitive_module_mappings, pbswift_files = depset( direct = pbswift_files, diff --git a/swift/swift.bzl b/swift/swift.bzl index 1f18320c9..dca5817a6 100644 --- a/swift/swift.bzl +++ b/swift/swift.bzl @@ -29,6 +29,7 @@ load("@build_bazel_rules_swift//swift:swift.bzl", "swift_library") load( "@build_bazel_rules_swift//swift/internal:providers.bzl", + _SwiftGRPCInfo = "SwiftGRPCInfo", _SwiftInfo = "SwiftInfo", _SwiftProtoInfo = "SwiftProtoInfo", _SwiftToolchainInfo = "SwiftToolchainInfo", @@ -90,6 +91,7 @@ load( ) # Re-export providers. +SwiftGRPCInfo = _SwiftGRPCInfo SwiftInfo = _SwiftInfo SwiftProtoInfo = _SwiftProtoInfo SwiftToolchainInfo = _SwiftToolchainInfo