cxx_library(
    name = "buffer",
    exported_headers = ["Buffer.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
    deps = [":range"],
)

cxx_library(
    name = "file_system",
    exported_headers = ["FileSystem.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
    deps = [":range"],
)

cxx_library(
    name = "likely",
    exported_headers = ["Likely.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
)

cxx_library(
    name = "range",
    exported_headers = ["Range.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
    deps = [":likely"],
)

cxx_library(
    name = "resource_pool",
    exported_headers = ["ResourcePool.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
)

cxx_library(
    name = "scope_guard",
    exported_headers = ["ScopeGuard.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
)

cxx_library(
    name = "thread_pool",
    exported_headers = ["ThreadPool.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
    deps = [":work_queue"],
)

cxx_library(
    name = "work_queue",
    exported_headers = ["WorkQueue.h"],
    header_namespace = "utils",
    visibility = ["PUBLIC"],
    deps = [":buffer"],
)

cxx_library(
    name = "utils",
    visibility = ["PUBLIC"],
    deps = [
        ":buffer",
        ":file_system",
        ":likely",
        ":range",
        ":resource_pool",
        ":scope_guard",
        ":thread_pool",
        ":work_queue",
    ],
)
