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

import("//flutter/third_party/abseil-cpp/absl.gni")

absl_source_set("status") {
  public = [
    "status.h",
    "status_payload_printer.h",
  ]
  sources = [
    "internal/status_internal.cc",
    "internal/status_internal.h",
    "status.cc",
    "status_payload_printer.cc",
  ]
  deps = [
    "//flutter/third_party/abseil-cpp/absl/base:atomic_hook",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:core_headers",
    "//flutter/third_party/abseil-cpp/absl/base:no_destructor",
    "//flutter/third_party/abseil-cpp/absl/base:nullability",
    "//flutter/third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//flutter/third_party/abseil-cpp/absl/base:strerror",
    "//flutter/third_party/abseil-cpp/absl/container:inlined_vector",
    "//flutter/third_party/abseil-cpp/absl/debugging:stacktrace",
    "//flutter/third_party/abseil-cpp/absl/debugging:symbolize",
    "//flutter/third_party/abseil-cpp/absl/functional:function_ref",
    "//flutter/third_party/abseil-cpp/absl/memory",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:cord",
    "//flutter/third_party/abseil-cpp/absl/strings:str_format",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
    "//flutter/third_party/abseil-cpp/absl/types:optional",
    "//flutter/third_party/abseil-cpp/absl/types:span",
  ]
}

absl_test("status_test") {
  sources = [ "status_test.cc" ]
  deps = [
    ":status",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:cord",
    "//flutter/third_party/abseil-cpp/absl/strings:str_format",
  ]
}

absl_source_set("statusor") {
  public = [ "statusor.h" ]
  sources = [
    "internal/statusor_internal.h",
    "statusor.cc",
  ]
  deps = [
    ":status",
    "//flutter/third_party/abseil-cpp/absl/base",
    "//flutter/third_party/abseil-cpp/absl/base:config",
    "//flutter/third_party/abseil-cpp/absl/base:core_headers",
    "//flutter/third_party/abseil-cpp/absl/base:nullability",
    "//flutter/third_party/abseil-cpp/absl/base:raw_logging_internal",
    "//flutter/third_party/abseil-cpp/absl/meta:type_traits",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:has_ostream_operator",
    "//flutter/third_party/abseil-cpp/absl/strings:str_format",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
    "//flutter/third_party/abseil-cpp/absl/types:variant",
    "//flutter/third_party/abseil-cpp/absl/utility",
  ]
}

absl_test("statusor_test") {
  sources = [ "statusor_test.cc" ]
  deps = [
    ":status",
    ":statusor",
    "//flutter/third_party/abseil-cpp/absl/base",
    "//flutter/third_party/abseil-cpp/absl/memory",
    "//flutter/third_party/abseil-cpp/absl/strings",
    "//flutter/third_party/abseil-cpp/absl/strings:string_view",
    "//flutter/third_party/abseil-cpp/absl/types:any",
    "//flutter/third_party/abseil-cpp/absl/types:variant",
    "//flutter/third_party/abseil-cpp/absl/utility",
  ]
}
