# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Please do not add more entries to this list. We plan to remove
# abseil-cpp from the Fuchsia platform source tree once cobalt
# moves out-of-tree.
visibility = [
  "$cobalt_root/*",
  "//third_party/abseil-cpp/*",
  "//third_party/tink/*",
]

source_set("status") {
  public_configs = [ "//third_party/abseil-cpp:abseil_config" ]
  public = [
    "status.h",
    "status_payload_printer.h",
  ]

  sources = [
    "internal/status_internal.h",
    "status.cc",
    "status_payload_printer.cc",
  ]
  deps = [
    "../base:atomic_hook",
    "../base:config",
    "../base:core_headers",
    "../base:raw_logging_internal",
    "../container:inlined_vector",
    "../debugging:stacktrace",
    "../debugging:symbolize",
    "../strings",
    "../strings:cord",
    "../strings:str_format",
    "../types:optional",
  ]
}

source_set("statusor") {
  public_configs = [ "//third_party/abseil-cpp:abseil_config" ]
  public = [ "statusor.h" ]

  sources = [
    "internal/statusor_internal.h",
    "statusor.cc",
  ]
  deps = [ ":status" ]
}
