#
# Copyright 2017 The Abseil 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.

# This package contains `absl::Status`.
# It will expand later to have utilities around `Status` like `StatusOr`,
# `StatusBuilder` and macros.

load("@rules_cc//cc:defs.bzl", "cc_library", "cc_test")
load(
    "//absl:copts/configure_copts.bzl",
    "ABSL_DEFAULT_COPTS",
    "ABSL_TEST_COPTS",
)

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

licenses(["notice"])

cc_library(
    name = "status",
    srcs = [
        "internal/status_internal.h",
        "status.cc",
        "status_payload_printer.cc",
    ],
    hdrs = [
        "status.h",
        "status_payload_printer.h",
    ],
    copts = ABSL_DEFAULT_COPTS,
    deps = [
        "//absl/base:atomic_hook",
        "//absl/base:config",
        "//absl/base:core_headers",
        "//absl/base:raw_logging_internal",
        "//absl/container:inlined_vector",
        "//absl/debugging:stacktrace",
        "//absl/debugging:symbolize",
        "//absl/strings",
        "//absl/strings:cord",
        "//absl/strings:str_format",
        "//absl/types:optional",
    ],
)

cc_test(
    name = "status_test",
    srcs = ["status_test.cc"],
    copts = ABSL_TEST_COPTS,
    deps = [
        ":status",
        "//absl/strings",
        "@com_google_googletest//:gtest_main",
    ],
)

cc_library(
    name = "statusor",
    srcs = [
        "internal/statusor_internal.h",
        "statusor.cc",
    ],
    hdrs = [
        "statusor.h",
    ],
    copts = ABSL_DEFAULT_COPTS,
    deps = [
        ":status",
        "//absl/base:core_headers",
        "//absl/base:raw_logging_internal",
        "//absl/meta:type_traits",
        "//absl/strings",
        "//absl/types:variant",
        "//absl/utility",
    ],
)

cc_test(
    name = "statusor_test",
    size = "small",
    srcs = ["statusor_test.cc"],
    deps = [
        ":status",
        ":statusor",
        "//absl/base",
        "//absl/memory",
        "//absl/types:any",
        "//absl/utility",
        "@com_google_googletest//:gtest_main",
    ],
)
