# 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.

import("//build/config.gni")
import("//build/rust/rustc_library.gni")
import("//src/sys/build/components.gni")
import("//src/sys/build/fuchsia_test_package.gni")

rustc_library("fuchsia-hyper") {
  name = "fuchsia_hyper"
  edition = "2018"
  version = "0.1.0"
  with_unit_tests = true
  deps = [
    "//src/lib/fuchsia-async",
    "//third_party/rust_crates:futures",
    "//third_party/rust_crates:hex",
    "//third_party/rust_crates:http",
    "//third_party/rust_crates:hyper",
    "//third_party/rust_crates:hyper-rustls",
    "//third_party/rust_crates:log",
    "//third_party/rust_crates:lru-cache-v0_1_2",
    "//third_party/rust_crates:parking_lot",
    "//third_party/rust_crates:pin-project",
    "//third_party/rust_crates:rustls",
    "//third_party/rust_crates:tokio",
  ]
  test_deps = [
    "//third_party/rust_crates:anyhow",
    "//third_party/rust_crates:matches",
    "//third_party/rust_crates:rand",
    "//third_party/rust_crates:webpki",
  ]
  if (is_host) {
    deps += [
      "//third_party/rust_crates:async-std",
      "//third_party/rust_crates:rustls-native-certs-v0_3_0",
      "//third_party/rust_crates:tower-service-v0_3_0",
    ]
  } else {
    deps += [
      "//garnet/lib/rust/webpki-roots-fuchsia",
      "//sdk/fidl/fuchsia.net:fuchsia.net-rustc",
      "//sdk/fidl/fuchsia.posix.socket:fuchsia.posix.socket-rustc",
      "//src/lib/fuchsia-component",
      "//src/lib/network/fidl_fuchsia_net_ext",
      "//src/lib/zircon/rust:fuchsia-zircon",
      "//third_party/rust_crates:itertools",
      "//third_party/rust_crates:libc",
      "//third_party/rust_crates:socket2",
    ]
    test_deps += [
      "//sdk/fidl/fuchsia.net.interfaces:fuchsia.net.interfaces-rustc",
      "//sdk/fidl/fuchsia.netstack:fuchsia.netstack-rustc",
      "//src/lib/fidl/rust/fidl",
      "//src/lib/fuchsia",
      "//third_party/rust_crates:test-case",
    ]
  }

  sources = [
    "src/lib.rs",
    "src/session_cache.rs",
  ]
  if (is_host) {
    sources += [ "src/not_fuchsia.rs" ]
  } else {
    sources += [
      "src/fuchsia.rs",
      "src/happy_eyeballs.rs",
    ]
  }
}

fuchsia_component("fuchsia-hyper-lib-test") {
  testonly = true
  manifest = "meta/fuchsia_hyper_lib_test.cmx"
  deps = [ ":fuchsia-hyper_test" ]
}

fuchsia_test_package("fuchsia-hyper-tests") {
  test_components = [ ":fuchsia-hyper-lib-test" ]
}

group("tests") {
  testonly = true
  deps = [
    ":fuchsia-hyper-tests",
    ":fuchsia-hyper_test($host_toolchain)",
  ]
}
