# 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("@rules_cc//cc:cc_library.bzl", "cc_library")
load("@rules_cc//cc:cc_test.bzl", "cc_test")

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

cc_library(
    name = "riegeli",
    srcs = ["riegeli.cc"],
    hdrs = ["riegeli.h"],
    deps = [
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@riegeli//riegeli/base:arithmetic",
        "@riegeli//riegeli/bytes:reader",
        "@riegeli//riegeli/bytes:writer",
        "@riegeli//riegeli/endian:endian_reading",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "riegeli_test",
    srcs = ["riegeli_test.cc"],
    deps = [
        ":riegeli",
        "//testing:test_string_utils",
        "@abseil-cpp//absl/functional:function_ref",
        "@abseil-cpp//absl/log",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/status:statusor",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
        "@riegeli//riegeli/bytes:string_writer",
    ],
)

cc_library(
    name = "distinguished_name",
    srcs = ["distinguished_name.cc"],
    hdrs = ["distinguished_name.h"],
    deps = [
        "@abseil-cpp//absl/container:flat_hash_map",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_test(
    name = "distinguished_name_test",
    srcs = ["distinguished_name_test.cc"],
    deps = [
        ":distinguished_name",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "byte_readers",
    hdrs = ["byte_readers.h"],
    deps = [
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings:str_format",
        "@abseil-cpp//absl/strings:string_view",
        "@riegeli//riegeli/endian:endian_reading",
    ],
)

cc_test(
    name = "byte_readers_test",
    srcs = ["byte_readers_test.cc"],
    deps = [
        ":byte_readers",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "byte_writers",
    srcs = ["byte_writers.cc"],
    hdrs = ["byte_writers.h"],
    deps = [
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "byte_writers_test",
    srcs = ["byte_writers_test.cc"],
    deps = [
        ":byte_writers",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "uri",
    srcs = ["uri.cc"],
    hdrs = ["uri.h"],
    deps = [
        "//constants:labels",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_test(
    name = "uri_test",
    srcs = ["uri_test.cc"],
    deps = [
        ":uri",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "byte_instruction",
    srcs = ["byte_instruction.cc"],
    hdrs = ["byte_instruction.h"],
    deps = [
        "@abseil-cpp//absl/base:nullability",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/types:span",
        "@riegeli//riegeli/base:chain",
        "@riegeli//riegeli/bytes:chain_reader",
        "@riegeli//riegeli/bytes:copy_all",
        "@riegeli//riegeli/bytes:reader",
        "@riegeli//riegeli/bytes:writer",
    ],
)

cc_test(
    name = "byte_instruction_test",
    srcs = ["byte_instruction_test.cc"],
    deps = [
        ":byte_instruction",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@abseil-cpp//absl/types:span",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/bytes:string_reader",
        "@riegeli//riegeli/bytes:string_writer",
    ],
)

cc_library(
    name = "media_type",
    srcs = ["media_type.cc"],
    hdrs = ["media_type.h"],
    deps = [
        "@abseil-cpp//absl/base:no_destructor",
        "@abseil-cpp//absl/container:flat_hash_map",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_test(
    name = "media_type_test",
    srcs = ["media_type_test.cc"],
    deps = [
        ":media_type",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
    ],
)

cc_library(
    name = "status_tracker",
    hdrs = ["status_tracker.h"],
    deps = [
        "//constants:status_codes",
        "//proto:manifest_cc_proto",
        "//proto:validation_result_cc_proto",
        "//proto:validation_status_cc_proto",
        "//validator:tracker",
    ],
)

cc_library(
    name = "two_stage_status_tracker",
    srcs = ["two_stage_status_tracker.cc"],
    hdrs = ["two_stage_status_tracker.h"],
    deps = [
        ":status_tracker",
        "//constants:status_codes",
        "//proto:manifest_cc_proto",
        "//proto:validation_result_cc_proto",
        "//proto:validation_status_cc_proto",
        "//validator:tracker",
    ],
)

cc_library(
    name = "dual_status_tracker",
    srcs = ["dual_status_tracker.cc"],
    hdrs = ["dual_status_tracker.h"],
    deps = [
        ":status_tracker",
        "//constants:status_codes",
        "//proto:ingredient_assertion_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:validation_result_cc_proto",
        "//proto:validation_status_cc_proto",
        "//validator:result",
        "//validator:tracker",
        "@abseil-cpp//absl/base:nullability",
        "@abseil-cpp//absl/log",
        "@abseil-cpp//absl/memory",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
    ],
)

cc_test(
    name = "two_stage_status_tracker_test",
    srcs = ["two_stage_status_tracker_test.cc"],
    deps = [
        ":status_tracker",
        ":two_stage_status_tracker",
        "//constants:status_codes",
        "//proto:assertion_cc_proto",
        "//proto:ingredient_assertion_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:validation_result_cc_proto",
        "//proto:validation_status_cc_proto",
        "//testing:proto_test_utils",
        "//testing:test_validation_tracker",
        "//validator:tracker",
        "@abseil-cpp//absl/strings",
        "@googletest//:gtest_main",
    ],
)

cc_test(
    name = "dual_status_tracker_test",
    srcs = ["dual_status_tracker_test.cc"],
    deps = [
        ":dual_status_tracker",
        "//constants:status_codes",
        "//proto:assertion_cc_proto",
        "//proto:ingredient_assertion_cc_proto",
        "//proto:manifest_cc_proto",
        "//proto:validation_result_cc_proto",
        "//proto:validation_status_cc_proto",
        "//testing:proto_test_utils",
        "@abseil-cpp//absl/container:flat_hash_set",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@googletest//:gtest_main",
    ],
)
