# Copyright 2022 The Pigweed Authors
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License. You may obtain a copy of
# the License at
#
#     https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations under
# the License.

load("@rules_proto//proto:defs.bzl", "proto_library")
load(
    "//pw_protobuf_compiler:pw_proto_library.bzl",
    "pw_proto_filegroup",
    # TODO(b/234873954): Also load `pw_proto_library` from here when possible.
    # A somewhat different Starlark macro with the same name is currently loaded
    # from `proto.bzl` (below), but we need to switch to the implementation from
    # `pw_proto_library.bzl` when possible.
)
load(
    "//pw_protobuf_compiler:proto.bzl",
    "pw_proto_library",
)

package(default_visibility = ["//visibility:public"])

pw_proto_filegroup(
    name = "pwpb_test_proto_and_options_files",
    srcs = ["pwpb_test.proto"],
    options_files = ["pwpb_test.options"],
)

proto_library(
    name = "pwpb_test_proto",
    srcs = [":pwpb_test_proto_and_options_files"],
    deps = [
        "//pw_protobuf:field_options_proto",
    ],
)

pw_proto_library(
    name = "pwpb_test_pw_proto",
    deps = [
        ":pwpb_test_proto",
    ],
)
