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

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

cc_library(
    name = "encode",
    srcs = ["encode.cc"],
    hdrs = ["encode.h"],
    deps = [
        ":serialization_utils",
        "//jumbf:constants",
        "//jumbf:encode_params",
        "//uuid",
        "@abseil-cpp//absl/log:check",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/strings:cord",
        "@riegeli//riegeli/base:types",
        "@riegeli//riegeli/bytes:backward_writer",
    ],
)

cc_test(
    name = "encode_test",
    srcs = ["encode_test.cc"],
    deps = [
        ":encode",
        ":serialization_utils",
        "//jumbf:constants",
        "//jumbf:encode_params",
        "//jumbf:test_utils",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/base:chain",
        "@riegeli//riegeli/base:initializer",
        "@riegeli//riegeli/bytes:chain_backward_writer",
        "@riegeli//riegeli/bytes:position_shifting_backward_writer",
    ],
)

cc_library(
    name = "intermediate",
    hdrs = ["intermediate.h"],
    deps = [
        "//uuid",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_library(
    name = "consume_box",
    srcs = ["consume_box.cc"],
    hdrs = ["consume_box.h"],
    deps = [
        ":intermediate",
        ":serialization_utils",
        "@abseil-cpp//absl/log:check",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
    ],
)

cc_library(
    name = "parse_super_box",
    srcs = ["parse_super_box.cc"],
    hdrs = ["parse_super_box.h"],
    deps = [
        ":consume_box",
        ":intermediate",
        ":parse_description_box",
        "//jumbf:constants",
        "@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_library(
    name = "serialization_utils",
    srcs = ["serialization_utils.cc"],
    hdrs = ["serialization_utils.h"],
    deps = [
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:statusor",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:cord",
        "@abseil-cpp//absl/strings:string_view",
        "@riegeli//riegeli/base:byte_fill",
        "@riegeli//riegeli/bytes:backward_writer",
        "@riegeli//riegeli/endian:endian_reading",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_library(
    name = "parse_description_box",
    srcs = ["parse_description_box.cc"],
    hdrs = ["parse_description_box.h"],
    deps = [
        ":consume_box",
        ":intermediate",
        ":serialization_utils",
        "//jumbf:constants",
        "//uuid",
        "@abseil-cpp//absl/log",
        "@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_library(
    name = "parse_embedded_file_description_box",
    srcs = ["parse_embedded_file_description_box.cc"],
    hdrs = ["parse_embedded_file_description_box.h"],
    deps = [
        ":intermediate",
        ":serialization_utils",
        "//jumbf:box",
        "//jumbf:constants",
        "@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 = "parse_super_box_test",
    srcs = ["parse_super_box_test.cc"],
    deps = [
        ":intermediate",
        ":parse_super_box",
        "//jumbf:constants",
        "//jumbf:test_utils",
        "//uuid",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "serialization_utils_test",
    srcs = ["serialization_utils_test.cc"],
    deps = [
        ":serialization_utils",
        "//jumbf:test_utils",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_macros",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/base:initializer",
        "@riegeli//riegeli/bytes:chain_backward_writer",
        "@riegeli//riegeli/bytes:position_shifting_backward_writer",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "parse_description_box_test",
    srcs = ["parse_description_box_test.cc"],
    deps = [
        ":intermediate",
        ":parse_description_box",
        "//jumbf:constants",
        "//jumbf:test_utils",
        "//uuid",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "consume_box_test",
    srcs = ["consume_box_test.cc"],
    tags = ["requires-mem:16g"],
    deps = [
        ":consume_box",
        ":intermediate",
        "//jumbf:test_utils",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@abseil-cpp//absl/strings",
        "@abseil-cpp//absl/strings:string_view",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)

cc_test(
    name = "parse_embedded_file_description_box_test",
    srcs = ["parse_embedded_file_description_box_test.cc"],
    deps = [
        ":intermediate",
        ":parse_embedded_file_description_box",
        "//jumbf:box",
        "//jumbf:constants",
        "@abseil-cpp//absl/status",
        "@abseil-cpp//absl/status:status_matchers",
        "@googletest//:gtest_main",
        "@riegeli//riegeli/endian:endian_writing",
    ],
)
