# Copyright 2026 Google LLC
#
# 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("@protobuf//bazel:cc_proto_library.bzl", "cc_proto_library")
load("@protobuf//bazel:proto_library.bzl", "proto_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")
load("//cbor:cbor_codegen.bzl", "cc_cbor_proto_library")

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

proto_library(
    name = "external_proto",
    srcs = ["external.proto"],
)

proto_library(
    name = "external_skip_new_proto",
    srcs = ["external_skip_new.proto"],
)

cc_proto_library(
    name = "external_skip_new_cc_proto",
    deps = [":external_skip_new_proto"],
)

proto_library(
    name = "external_skip_proto",
    srcs = ["external_skip.proto"],
    exports = [":external_skip_new_proto"],
    deps = [
        ":external_skip_new_proto",
    ],
)

cc_proto_library(
    name = "external_skip_cc_proto",
    deps = [":external_skip_proto"],
)

cc_proto_library(
    name = "external_cc_proto",
    deps = [":external_proto"],
)

cc_cbor_proto_library(
    name = "external_cbor_proto",
    srcs = [":external_proto"],
    deps = [":external_cc_proto"],
)

proto_library(
    name = "migrated_proto",
    srcs = ["migrated.proto"],
    exports = ["//cbor/test/subdir:imported_public_proto"],
    deps = ["//cbor/test/subdir:imported_public_proto"],
)

cc_proto_library(
    name = "migrated_cc_proto",
    deps = [":migrated_proto"],
)

cc_cbor_proto_library(
    name = "migrated_cbor_proto",
    srcs = [":migrated_proto"],
    deps = [
        ":migrated_cc_proto",
        "//cbor/test/subdir:imported_public_cbor_proto",
    ],
)

proto_library(
    name = "test_proto",
    srcs = ["test.proto"],
    deps = [
        ":external_proto",
        ":external_skip_proto",
        "//cbor:tags_proto",
        "@protobuf//:timestamp_proto",
    ],
)

cc_proto_library(
    name = "test_cc_proto",
    deps = [":test_proto"],
)

cc_cbor_proto_library(
    name = "test_cbor_proto",
    srcs = [":test_proto"],
    deps = [
        ":test_cc_proto",
    ],
)

cc_test(
    name = "cbor_generator_test",
    srcs = ["cbor_generator_test.cc"],
    deps = [
        ":external_cc_proto",
        ":migrated_cbor_proto",
        ":test_cbor_proto",
        ":test_cc_proto",
        "//cbor",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
        "@libcppbor",
    ],
)
